【问题标题】:R moving data from list to data frameR将数据从列表移动到数据框
【发布时间】:2012-09-17 05:11:14
【问题描述】:

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

有什么建议吗?

【问题讨论】:

  • 您能否开始使用dput 作为向我们展示您正在使用的数据对象的一种方式?谢谢。
  • 看看这个问题并回答最有效的方法stackoverflow.com/questions/5942760/…
  • @mnel 这个问题是关于 columns 到 data.frame 的列表。这是关于 rows 到 data.frame 的列表;即,rbindlist(如果可以轻松接受非data.tableFR#2264)。
  • @MatthewDowle——非常正确。我的意思是指stackoverflow.com/questions/9728407/…

标签: r


【解决方案1】:

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

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

如果列表的每个元素都是一个向量,你可以使用do.callrbind,如Jilber所示,或者转置上面的data.frame

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      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
      

      【讨论】:

        【解决方案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
        

        【讨论】:

          猜你喜欢
          • 2019-06-08
          • 2022-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-23
          • 2019-10-11
          • 2017-04-20
          • 2017-04-11
          相关资源
          最近更新 更多