0

我有一个结构相同的 csv 文件的目录。我正在尝试将它们全部加载到单个 data.frame 中。目前,我使用lapply()withread.csv()来获取 data.frames 列表,并且我正在寻找一种优雅的方法来将此列表转换为避免显式循环的 data.frame。

my 的结果lapply(list.of.file.names,read.csv)可以近似为这个结构:

list.of.dfs <- list(data.frame(A=sample(seq(from = 1, to = 10), size = 5),
                               B=sample(seq(from = 1, to = 10), size = 5)), 
                    data.frame(A=sample(seq(from = 1, to = 10), size = 5),
                               B=sample(seq(from = 1, to = 10), size = 5)), 
                    data.frame(A=sample(seq(from = 1, to = 10), size = 5),
                               B=sample(seq(from = 1, to = 10), size = 5))
                    )

以下行的优雅版本适用于任意长度的列表:

one.data.frame <- rbind(list.of.dfs[[1]],list.of.dfs[[2]],list.of.dfs[[3]])

我可以使用 for 循环来做到这一点,但是有基于向量的解决方案吗?

4

2 回答 2

5

do.call是这样做的基本方法。

do.call(rbind, list.of.dfs)

data.table但是,如果您有很多数据项,它可能会很慢,并且这里关于 SO 的其他讨论集中在如何通过使用自定义函数或orplyr包来加快速度。例如:

为什么 rbindlist 比 rbind “更好”?

rbind 可以在 R 中并行化吗?

rbind.data.frame 的性能

于 2013-07-26T00:40:14.117 回答
4

@thelatemail 提到了它,但您可能希望使用以下内容来提高速度:

rbindlist(list.of.dfs)

(需要library(data.table)

于 2013-07-26T00:48:15.393 回答