批量读取许多文件中的某些变量

时间:2018-08-13 16:34:26

标签: r

自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绑定在一起。

谢谢!

1 个答案:

答案 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)