【问题标题】:Nested named list to data frame嵌套命名列表到数据框
【发布时间】:2016-02-03 04:20:05
【问题描述】:

我有以下来自分析的命名列表输出。可重现的代码如下:

list(structure(c(-213.555409754509, -212.033637890131, -212.029474755074, 
-211.320398316741, -211.158815833294, -210.470525157849), .Names = c("wasn", 
"chappal", "mummyji", "kmph", "flung", "movie")), structure(c(-220.119433774144, 
-219.186901747536, -218.743319709963, -218.088361753899, -217.338920075687, 
-217.186050877079), .Names = c("crazy", "wired", "skanndtyagi", 
"andr", "unveiled", "contraption")))

我想将其转换为数据框。我已经尝试使用 reshape2、dplyr 和其他将列表转换为数据框的解决方案来取消列表到数据框选项,但没有取得多大成功。我正在寻找的输出是这样的:

  Col1        Val1      Col2          Val2
1 wasn      -213.55     crazy         -220.11
2 chappal   -212.03     wired         -219.18
3 mummyji   -212.02     skanndtyagi   -218.74

以此类推。实际的输出有多个具有配对值的列,并且运行到许多行中。我已经尝试过以下代码:

do.call(rbind, lapply(df, data.frame, stringsAsFactors = TRUE)) 

works 部分提供一列中的所有字符值和第二列中的数值。

data.frame(Reduce(rbind, df))

不起作用 - 提供第一个列表中的名称和两个列表中的数字作为两个不同的行

colNames <- unique(unlist(lapply(df, names)))
M <- matrix(0, nrow = length(df), ncol = length(colNames), 
        dimnames = list(names(df), colNames))
matches <- lapply(df, function(x) match(names(x), colNames))
M[cbind(rep(sequence(nrow(M)), sapply(matches, length)),
    unlist(matches))] <- unlist(df)
M

没有正常工作。

有人可以帮忙吗?

【问题讨论】:

    标签: r list dataframe nested


    【解决方案1】:

    由于列表元素的长度都相同,您应该可以stack它们然后按列组合它们。

    试试:

    do.call(cbind, lapply(myList, stack))
    

    【讨论】:

      【解决方案2】:

      这是另一种方式:

      as.data.frame( c(col = lapply(x, names), val = lapply(x,unname)) )
      

      它是如何工作的。 lapply 返回一个列表;两个列表结合c 组成另一个列表;并且列表很容易被强制转换为 data.frame,因为后者只是具有相同长度的向量列表。

      比强制一个 data.frame 更好的是修改它的类,有效地告诉列表“你现在是一个 data.frame”:

      L = c(col = lapply(x, names), val = lapply(x,unname))
      library(data.table)
      setDF(L)
      

      结果不需要使用=&lt;- 分配到任何地方,因为L 已“就地”修改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-06
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        • 2021-05-24
        • 2016-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多