将来自不同文件夹的多个 csv 文件(相似名称)合并到一个 csv 中并逐行绑定它们 [关闭]
Posted
技术标签:
【中文标题】将来自不同文件夹的多个 csv 文件(相似名称)合并到一个 csv 中并逐行绑定它们 [关闭]【英文标题】:Combine multiple csv files (similar names) from different folders into one csv and bind them row wise [closed] 【发布时间】:2021-06-03 18:56:23 【问题描述】:我有不同的文件夹,其中包含不同月份的数据,但 csv 文件名相同。请注意,这些文件具有相似的列结构,因此我想将它们逐行合并。
c:\Folder1\abc.csv
c:\Folder2\abc.csv
c:\Folder3\abc.csv
实际上有几个文件夹,因此我很困惑如何有效地执行他的任务。我不希望将每个文件数据复制粘贴到一个 csv 中的麻烦。所以我认为有一个批处理脚本或 R 代码可以快速执行此功能。
【问题讨论】:
library(tidyverse); map_dfr(1:3, ~ read_csv(glue::glue("C:/Folder.x/abc.csv")))
欢迎来到 ***。请阅读您在注册时被要求填写的tour。也请阅读How to Ask 一个问题。然后回来edit您的问题并提供minimal reproducible example。
【参考方案1】:
您可以将list.files
与pattern
和recursive = TRUE
一起使用。
filenames <- list.files(pattern = 'abc\\.csv', recursive = TRUE)
result <- purrr::map_df(filenames, read.csv, .id = 'id')
result
会将所有数据合并到一个文件中,并带有一个附加列 id
,它将区分每个文件夹中的行。
【讨论】:
太棒了!然而,合并后的列名有些改变,例如如果时间戳列是时间戳,在新的合并 csv 中它显示为“time.stamp..” 那是因为你的列名中有空格,R 不喜欢这样,因此它用'.'
替换空格。你可以使用result <- purrr::map_df(filenames, readr::read_csv, .id = 'id')
太棒了!保留原始列名......所以基本上 map_df 而不是 map_dfr 将数据映射到行(?)。
我在这个系列中的最后一个问题是:如果我需要从我正在读取的每个 csv 文件中选择特定的列,然后使用与上述相同的方法组合文件。
是的,map_dfr
做同样的工作。您可以使用select
选择特定列。 result <- purrr::map_df(filenames, ~readr::read_csv(.x) %>% select(col1, col2), .id = 'id')
以上是关于将来自不同文件夹的多个 csv 文件(相似名称)合并到一个 csv 中并逐行绑定它们 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
怎么用命令行把多个csv文件合并成一个xls或者xlsx文件
java编程将若干个excel文件合并成一个csv文件,文件变大的很多,怎么解决
如何用批处理命令把1个文件夹里多个csv文件的某一列合并成一个txt