【问题标题】:R combine list to specical format of tableR将列表组合到表格的特定格式
【发布时间】:2011-05-19 07:16:20
【问题描述】:

我有一个包含不同条目数量的子列表的列表,如下所示:

x <- list(
  c("a1", "a2", "a3", "a4", "a5", "a6", "a7"),
  c("b1","b2","b3","b4"),
  c("c1","c2","c3"),
  c("d1")
)

我想将此文件转换为具有三列的数据帧(第一列是子列表的序列,即 1 到 4:第二列是条目;第三列代表我的停止代码,所以我使用了 1对于每一行,最终结果如下:

1  a1  1
1  a2  1
1  a3  1
1  a4  1
1  a5  1
1  a6  1
1  a7  1
2  b1  1
2  b2  1
2  b3  1
2  b4  1
3  c1  1
3  c2  1
3  c3  1
4  d1  1

我尝试使用 cbind,但是,在我看来,它似乎只适用于具有相同条目数的子列表。有没有更聪明的方法?

【问题讨论】:

    标签: list r


    【解决方案1】:

    这是一个例子:

    data.frame(
      x=rep(1:length(x), sapply(x, length)),
      y=unlist(x),
      z=1
    )
    

    【讨论】:

      【解决方案2】:
      library(reshape2)
      
      x <- melt(x) ## Done...
      
      ## Trivial...
      x$stop <- 1
      x <- x[c(2,1,3)]
      

      【讨论】:

      • 你的意思可能是library(reshape2)
      • reshape2reshape 的更新,速度明显更快。
      • 好的,谢谢!它们现在从我的个人资料中自动加载,所以我很少手动调用它们!
      • 很高兴听到 reshape2 比 reshape 快。 reshape 中的所有原始函数在 reshape2 中都有改进吗?
      【解决方案3】:

      一种选择是使用包plyr 中的拆分、应用、组合功能。在这种情况下,您需要 ldply 它将获取一个列表并将元素组合到 data.frame 中:

      library(plyr)
      ldply(seq_along(x), function(i)data.frame(n=i, x=x[[i]], stop=1))
      
         n  x stop
      1  1 a1    1
      2  1 a2    1
      3  1 a3    1
      4  1 a4    1
      5  1 a5    1
      6  1 a6    1
      7  1 a7    1
      8  2 b1    1
      9  2 b2    1
      10 2 b3    1
      11 2 b4    1
      12 3 c1    1
      13 3 c2    1
      14 3 c3    1
      15 4 d1    1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-07
        • 2018-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多