使用基于文件名的索引合并 R 中的多个 csvs

Merging multiple csvs in R with index based on the file name

我正在尝试将多个 csv 文件与 R 中的相同列合并。我尝试了 Merging of multiple excel files in R 中提出的解决方案并且效果很好。但是,我想添加一个索引列(行名)来标识每一行对应于哪个文件。我试过了:

files <- list.files(pattern="*.csv")

require(purrr)

mainDF <- files %>% map_dfr(read.csv, row.names=files) 

但我收到错误消息:

Error in read.table(file = file, header = header, sep = sep, quote = quote, : invalid 'row.names' length

我想要一个与此类似的专栏,或者最好只是数字,例如1、2 等等

有什么想法吗?

处理此问题的一种方法是 map_dfr().id 参数。如果传递给 map_dfr() 的列表已命名,您可以在输出中包含一个列,其中包含每个列表元素的名称。如果列表未命名,则索引将包含在列中。这样,对应于每个 .csv 的行将与该索引相关联。

因此您可以执行以下操作。请注意,第二行是可选的。如果省略命名,则会得到索引 (1,2,...)。

files <- list.files(pattern="*.csv")

names(files) <- paste('file', 1:length(files), sep = '_')

require(purrr)

mainDF <- files %>% map_dfr(read.csv, .id = 'file_ID') 

结果 data.frame 将有一个名为 file_ID 的列。