我有list
,其中包含0-3个ID号:
[[1]]
[1] 2125233 <NA> <NA>
[[2]]
[1] 2009281 2380145 2931851
[[3]]
[1] 1517163 2836702 2506119
如何将其转换为data frame
,其中元素编号成为id,元素的内容变为字符串/因子,如下所示:
id contents
1 2125233 <NA> <NA>
2 2009281 2380145 2931851
3 1517163 2836702 2506119
... .....
我已经尝试过查看unlist
,但它只会将所有内容都抛到一个长向量中。
有什么建议吗?
答案 0 :(得分:7)
List <- list(c(123, NA, NA), c(1223, 4546,5656), c(4546,4646,464))
> List
[[1]]
[1] 123 NA NA
[[2]]
[1] 1223 4546 5656
[[3]]
[1] 4546 4646 464
> data.frame(do.call(rbind, List))
X1 X2 X3
1 123 NA NA
2 1223 4546 5656
3 4546 4646 464
答案 1 :(得分:5)
do.call(rbind...)
方法mentioned by Jilber可能是最常见或最直观的(并且比以下方法更快),但如果您想使用unlist
,则不会太远。
诀窍是将matrix()
与unlist
结合使用,将行数设置为列表的length
。
List <- list(c(123, NA, NA), c(1223, 4546,5656), c(4546,4646,464))
matrix(unlist(List), nrow = length(List), byrow = TRUE)
# [,1] [,2] [,3]
# [1,] 123 NA NA
# [2,] 1223 4546 5656
# [3,] 4546 4646 464
## Or, for a data.frame
data.frame(matrix(unlist(List), nrow = length(List), byrow = TRUE))
答案 2 :(得分:4)
library(plyr)
ldply(list_name)
> x <- c(1,2,3)
> foo <- list(x,x,x)
> foo
[[1]]
[1] 1 2 3
[[2]]
[1] 1 2 3
[[3]]
[1] 1 2 3
> ldply(foo)
V1 V2 V3
1 1 2 3
2 1 2 3
3 1 2 3
答案 3 :(得分:2)
R data.frames
实际上是列表,如果列表中的每个向量都是一列,这将使这变得很容易:
List <- list(c(123, NA, NA), c(1223, 4546,5656), c(4546,4646,464))
DF <- data.frame(List)
如果列表的每个元素都是向量,您可以使用Jilber显示的do.call
和rbind
,或转置上面的data.frame
:
DF <- data.frame(t(DF))