我有一个基本文件夹,里面有很多文件夹。我想转到每个文件夹,找到一个名为table_amzn.csv(如果存在)的文件,然后读取R中的所有这些文件,并将所有文件一个接一个地放在一个数据帧中。我已经验证所有文件都有相同的列。我知道如何将CSV读入R.但是我怎么能遍历基础文件夹中的所有文件夹并连接数据
答案 0 :(得分:3)
以下是最近添加到包rio
的实现:
files <- list.files(pattern = "table_amzn.csv", recursive = TRUE, full.names = TRUE)
devtools::install_github("leeper/rio")
library(rio)
df <- import_list(files, rbind = TRUE)
这会将files
中的所有对象加载到单个data.frame
对象中。或者,如果您使用rbind = FALSE
进行呼叫,则会返回data.frames列表
答案 1 :(得分:2)
这在基础R中也可以直接:
## change `dir` to whatever your 'base folder' actually is
dir <- '~/base_folder'
ff <- list.files(dir, pattern = "table_amzn.csv", recursive = TRUE, full.names = TRUE)
out <- do.call(rbind, lapply(ff, read.csv))
如果您的列相同但由于某种原因(拼写错误等)具有不同的列名称,您可以修改上述内容,如:
out <- do.call(rbind, lapply(ff, read.csv, header = FALSE, skip = 1))
names(out) <- c('stub1', 'stub2') # whatever they should be