自2010年以来,我每个月都有一个不同的CSV文件。它们都具有相同的基本信息,但是最近的文件比旧文件具有更多的变量。它们的排列顺序也不同。
我想批量读取目录中的所有文件作为data.tables,从每个读取的文件中选择一个变量列表,然后将其编译为纵向data.table,而不使用rbind
。
我考虑过使用一些类似的东西:
all_files = list.files()
dbs <- lapply(all_files, data.table)
然后从每个data.table
中选择一个变量列表:
object[ , c("ID", "Date", "Paid", "Pending")]
# These 4 variables have the exact same names throughout all files.
最后,使用rbind
将所有data.tables绑定在一起。
谢谢!
答案 0 :(得分:2)
如果列的名称相同:
library(data.table)
fnames <- dir(path = choose.dir(), pattern = '.*csv', full.names = T, recursive = F)
cols <- c('ID', 'Date', 'Paid', 'Pending')
data_list <- lapply(fnames, function(z){
ret <- fread(z, select = cols)
ret$filename <- z
return(ret)
})
我将filename
作为列名存储,因为您可能想追溯数据的来源(对于任何差异等)。
要将其放入单个data.table
对象中:
dat <- rbindlist(dat_list, use.names = T, fill = T)