2016-05-04 14 views
0

私は2つの列からなるデータフレームを名前付きベクトル(ネストされたリスト)に変換しようとしています。各行の情報は本質的にキー:値のペアであるため、最終的なベクトルのリストはそれぞれキーで名前を付け、それぞれの値を含む必要があります。データフレームの2つの列を名前付きベクトルに変換する方法は?

Example input: 

Var1 Var2 
A  1 
A  2 
B  1 
B  3 
C  3 
C  4 
C  5 

Example Output: 
namedArray = list(A = c(1,2), B = c(1,3), C = c(3,4,5)) 

私はreshape2パッケージのdcast()を使用して、これを行うために管理、しかしこれは、データフレームをキャストすることによって導入された行名とNAのを削除するために、追加の後処理が必要でした。

もっと効率的な方法がありますか?

+2

小さな再現可能な例とそれに基づいて予想される出力を示してください。 – akrun

答えて

2

はあなたが2列ある場合:データフレームDF1におけるXとYを、そしてあなたはYの値は、Xの値を持つ項目の名前になりたい:

myList <- as.list(df1$X) 
names(myList) <- df1$Y 

修正質問に対して、答えがあることがすでにまさにその機能である(と私が与えたものという良い答えていたかもしれません:あなたは、データフレームから、リスト内のキーと値のペアをしたい場合技術は、このようになります

> split(dat$Var2, dat$Var1) 
$A 
[1] 1 2 

$B 
[1] 1 3 

$C 
[1] 3 4 5 
+0

元の質問の例を省略してもわかりませんでした。私は2つの変数間の1対多の関係を扱うソリューションが必要です。 – ejspina

+0

それは、 'split'が完全に満足のいく答えであることをさらに明確にします。 –

+0

ありがとうございました。修正された回答は完全に機能します。 – ejspina

0

x = data.frame(x=letters[1:5],y=1:5) 
y = split(x,seq(1:nrow(x))) 
names(y) = x$x 
y$a 
+0

これは、上の答えと同じ結果を与えます@ 42- – ejspina

0

私にsplit()について考えさせてくれてありがとう@ 42-と@MMerryありがとう。ある変数を別の変数に分割し、出力をリストにラップするという素晴らしいソリューションが見つかりました。

y <- as.list(split(df$Var2, df$Var1)) 
+1

こんにちは@flowscience、 'split()'は 'as.list()'呼び出しでそれを折り返すのをスキップできるようにリストを出力します。他のユーザーに役立つようにこれを回答してもいいですか? – MMerry

+0

さらに良い!もう一度ありがとう、やった。 – ejspina

関連する問題