将 R 中的多个 csv 与基于文件名的索引合并

问题描述

我正在尝试将多个 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) 

但我收到错误

read.table 中的错误文件 = 文件标题 = 标题,sep = sep,报价 = 报价,: 'row.names' 长度无效

我想要一个与此类似的列,或者理想情况下只是数字,例如1、2 等

I would like a column like this,or even just the number

有什么想法吗?

解决方法

处理此问题的一种方法是 .idmap_dfr() 参数。如果传递给 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 的列。