2015-07-21 67 views
2

什麼感覺就像一個非常簡單的問題,我只是堅持。我試圖將列表列表分成兩列數據框,列表編號爲列。將列表清單轉換爲數據框,列表編號爲列

樣本數據:

d <- list("1" =c("ad","af"), "2" =c("bc","bd","be")) 
> d 
$`1` 
[1] "ad" "af" 

$`2` 
[1] "bc" "bd" "be" 

所需的輸出:

ID Value 
1  ad 
1  af 
2  bc 
2  bd 
2  be 

一個for循環做的工作,但我想避免這種情況。該unlist函數實際上實現了略多於我想,因爲它列出了在名稱列表名稱後面的元素個數:

unlist(d) 
    11 12 21 22 23 
"ad" "af" "bc" "bd" "be" 

謝謝!

回答

5

您可以簡單地使用:

stack(d) 
# values ind 
#1  ad 1 
#2  af 1 
#3  bc 2 
#4  bd 2 
#5  be 2 
+0

驚人的有些事情是多麼簡單的。謝謝 - 將標記爲答案時,定時器允許 – so13eit

+0

沒問題,樂於分享! –

0

一個快速的方法:

as.data.frame(do.call(rbind, 
    mapply(function(id, vals) cbind(ID = id, Value = vals), names(d), d, SIMPLIFY = FALSE))) 
0

嘗試:

unlist(d, use.names=FALSE) 
"ad" "af" "bc" "bd" "be"