使用基于文件名的索引合并 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
的列。
我正在尝试将多个 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
的列。