【问题标题】:Combine/ dataframes across lists跨列表组合/数据框
【发布时间】:2021-02-16 15:18:00
【问题描述】:

我正在尝试使用rbind 或类似方法在两个数据框列表之间合并同名数据框。背景是用户正在导入包含 130 种不同化合物数据的文件作为唯一的数据框,因此每个导入的数据文件中都有 130 个数据框的列表。数据文件作为列表导入,因此有一个包含数据帧列表的数据文件列表。

化合物/数据框名称每天保持不变,但导入的文件数量会根据用户偏好而变化。

我想通过复合将数据框rbind 组合在一起。这是一个可重复的示例,可以满足我的要求。

list.of.lists <- list(
        df.list1 <- list(df1 = data.frame("ID" = letters[1:10],
                                          "Data" = rnorm(10, 5, 2)),
                         df2 = data.frame("ID" = letters[1:10],
                                          "Data" = rnorm(10, 5, 2))
                         
        ),
        df.list2 <- list(df1 = data.frame("ID" = letters[11:20],
                                          "Data" = rnorm(10, 5, 2)),
                         df2 = data.frame("ID" = letters[11:20],
                                          "Data" = rnorm(10, 10, 2))
        )
)

j <- Map(rbind, list.of.lists[[1]], list.of.lists[[2]]) # Results in a list of data frames (df1, df2)

这会生成一个包含 2 个数据框的列表,每个数据框有 20 个结果,这正是我想要的,但是当应用于现实世界时,我不知道list.of.lists 中将包含多少列表。

我怀疑答案相对简单,但我有点卡住了。非常感谢您的帮助!

【问题讨论】:

  • do.call(function(...) Map(rbind, ...), list.of.lists)
  • 这正是我想要的!保持 dfs 的所有名称和所有内容不变。提醒我椭圆 (...) 语法在这种情况下的作用?请将此作为答案,以便我选择它。

标签: r list dataframe rbind


【解决方案1】:

我怀疑你正在寻找函数do.call:'

lapply(list.of.lists, function(x){
  do.call(what = rbind, x)
})

【讨论】:

  • 这最终会丢失“df”的名称。我可以将它包装在 setNames() 函数中,但如果可能的话,我宁愿不这样做。
猜你喜欢
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 2011-06-28
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多