R将数据从列表移动到数据帧

时间:2012-09-25 16:22:52

标签: r

我有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,但它只会将所有内容都抛到一个长向量中。

有什么建议吗?

4 个答案:

答案 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.callrbind,或转置上面的data.frame

DF <- data.frame(t(DF))