3

我有一个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

4 回答 4

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
于 2012-09-25T16:24:42.673 回答
5

Jilber 提到的方法do.call(rbind...)可能是最常见或最直观的(并且比以下方法更快),但如果您想使用.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))
于 2012-09-25T17:23:02.103 回答
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
于 2012-09-25T16:24:28.697 回答
2

Rdata.frames实际上是列表,如果列表中的每个向量都是一列,这将成为一项简单的任务:

List <- list(c(123, NA, NA), c(1223, 4546,5656), c(4546,4646,464))
DF <- data.frame(List)

在列表的每个元素都是向量的情况下,您可以使用Jilber 所示的 and ,或转置上述do.call内容:rbinddata.frame

DF <- data.frame(t(DF))
于 2012-09-26T18:15:28.950 回答