2016-05-04 51 views
0

我試圖將一個由兩列組成的數據框轉換爲一個命名向量(嵌套列表)。每一行中的信息基本上都是關鍵字:值對,所以最終向量中的列表應該每個都由關鍵字命名幷包含它們各自的值。如何將兩列數據幀轉換爲命名向量?

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)) 

我成功地做到這一點使用dcast()在reshape2包,然而,這需要額外的後處理,以消除鑄造數據幀引進行名稱和NA的。

有沒有更高效的方法來實現這個目標?

+2

請在此基礎上顯示一個小的可重複的示例和預期輸出。 – akrun

回答

2

如果你有2列:X和Y在數據幀DF1,你想個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

我不清楚在原始問題中省略了一個例子。我需要一個解決方案來處理兩個變量之間的一對多關係。 – 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

謝謝@ 42-和@MMerry讓我思考split()。我發現了一個很好的解決方案,將另一個變量分開,並將輸出包裝成一個列表。

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

上面給出的答案相同的結果嗨@flowscience,'split()'應該輸出一個列表,以便您可以跳過將其封裝在'as.list()'調用中。您是否也可以標記爲已回答,因爲它可以幫助其他用戶 – MMerry

+0

更好!再次感謝並完成。 – ejspina

相關問題