【问题标题】:Turning list into a data.frame将列表转换为 data.frame
【发布时间】:2015-10-15 08:04:03
【问题描述】:
mylist <- list(structure(c(1L, 1L, 2L, 2L, 2L, 2L, NA, NA), .Names = c("A", 
"B", "C", "D", "E", "F", "G", "H")), structure(c(1L, 1L, 1L, 
1L, 1L, 2L, 1L, NA), .Names = c("A", "B", "C", "D", "E", "F", 
"G", "H")))

mylist
[[1]]
 A  B  C  D  E  F  G  H 
 1  1  2  2  2  2 NA NA 

[[2]]
 A  B  C  D  E  F  G  H 
 1  1  1  1  1  2  1 NA 

我有一个类似上面的列表,我想将它折叠到一个 data.frame 中,以便我可以单独对每一列进行子集化,即df$Adf$B 等。

> df$A
[1] 1 1

> df$B
[1] 1 1

> df$C
[1] 2 1

等等

【问题讨论】:

  • 我想你想要do.call(rbind, lapply(mylist, as.data.frame.list))
  • @RichardScriven 谢谢。这正是我想要的
  • 实际上,有了这个,因为你已经得到了你可以做的所有数值as.data.frame(do.call(rbind, mylist))
  • @RichScriven,我正在处理已经是数据框列表 (list_of_dataframes) 的数据,并将您的代码修改如下:do.call(rbind, list_of_dataframes)。这有效,但创建了时髦的行名。为避免创建行名,我使用了此代码 do.call(function(...) rbind(..., make.row.names = FALSE), list_of_dataframes)。对于我的简单测试用例,这有效(没有乱七八糟的行名),但我不确定这是否适合使用 ...。这是一个合理的方法吗?

标签: r


【解决方案1】:

你可以根据名字unlistsplit,类似

temp <- unlist(mylist)
res <- split(unname(temp), names(temp))

# res$A
# [1] 1 1
# res$B
# [1] 1 1
# res$C
# [1] 2 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2011-09-12
    相关资源
    最近更新 更多