【问题标题】:Most efficient way to bind data frames (over 10^8 columns) based on column names [duplicate]根据列名绑定数据框(超过 10^8 列)的最有效方法 [重复]
【发布时间】:2018-09-18 01:40:57
【问题描述】:

根据列名重新绑定数据帧的最有效方法是什么?所有数据框的列名都不相同,因此我希望在此过程中引入 NA 值。

这是我正在谈论的可重现示例,但请记住,每个数据帧的数据帧大小为 1 行 x 约 10^8 列。我有一个包含 100 个这样的数据框的列表。

a <- as.data.frame(t(as.data.frame(c(1, 4, 5, 3, 7, 3, 5, 6))))
rownames(a) <- NULL
colnames(a) <- c("AA", "DD", "CD", "KD", "DSF", "DFS", "RF")

b <- as.data.frame(t(as.data.frame(c(4, 7, 3, 2, 7, 3)))
rownames(b) <- NULL
colnames(b) <- c("AA", "DFS", "CD", "UF", "KD", "DD")


c <- as.data.frame(t(as.data.frame(c(2, 4, 7, 3,)))
rownames(c) <- NULL
colnames(c) <- c("AA", "NF", "CD", "UF")

list <- list(a, b, c)

谢谢!

【问题讨论】:

  • bind_rows 肯定能胜任这项工作,但拥有 1 亿列的数据框似乎大得令人望而却步。您确定数据绝对必须以这种方式存储吗?
  • 是的,我有超过 1 亿个特征可以运行特征选择。如果您对这个大小的数据集的特征选择有任何建议,也将不胜感激,尽管超出了这个问题的范围。
  • 数据帧会带来大量的计算开销。我建议将这些数据存储在矩阵中。
  • @jdobres 以下解决方案似乎都不适用于矩阵。您对矩阵有什么建议吗?

标签: r dataframe dplyr plyr


【解决方案1】:

我们可以使用bind_rows

library(dplyr)
bind_rows(list)

rbindlist 来自data.table

library(data.table)
rbindlist(list, fill = TRUE)

【讨论】:

  • 只想再补充一点:rbindlist 可以比 bind_rowsrbind win-vector.com/blog/2015/07/efficient-accumulation-in-r 快得多
  • 这不是问题,但是正如矩阵所建议的那样,您有任何适用于矩阵的解决方案吗?以上似乎不适用于矩阵。谢谢!
  • @KeshavM:阅读我发布的链接。那个选项在那里
猜你喜欢
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多