r - 将一堆 csv 文件合并为一个带有标题的文件

标签 r list csv merge

我有几个 csv 文件,我想合并为一个列表,然后输出为一个合并的 csv。假设这些文件名为file1.csv、file2.csv、file3.csv等...

file1.csv     # example of what each might look like
V1 V2 V3 V4
12 12 13 15
14 12 56 23

我如何创建这些 csvs 的列表,以便我可以输出一个合并的 csv,它将标题作为文件名,顶部的列名作为注释?所以在 Excel 中看起来像这样的 csv:

# 1: V1
# 2: V2
# 3: V3
# 4: V4

file1.csv
12 12 13 15
14 12 56 23

file2.csv
12 12 13 15
14 12 56 23

file3.csv
12 12 13 15
14 12 56 23

我正在尝试在双 for 循环中使用 list 函数将这些 csvs 合并在一起,将每个列表写入一个变量,并将每个变量写入一个表输出。然而,这并没有按预期工作。

# finding the correct files in the directory
files <- dir("test files/shortened")
files_filter <- files[grepl("*\\.csv", files)]
levels <- unique(gsub( "-.*$", "", files_filter))

# merging
for(i in 1:length(levels)){
  level_specific <- files_filter[grepl(levels[i], files_filter)]
  bindme
  for(j in 1:length(level_specific)){
    bindme2 <- read.csv(paste("test files/shortened/",level_specific[j],sep=""))
    bindme <- list(bindme,bindme2)
    assign(levels[i],bindme)
  }
  write.table(levels[i],file = paste(levels[i],"-output.csv",sep=""),sep=",")
}

最佳答案

查看您的代码,我认为您不需要 for 循环。使用 data.table 包,您可以按如下方式进行:

filenames <- list.files(pattern="*.csv")
files <- lapply(filenames, fread) # fread is the fast reading function from the data.table package
merged_data <- rbindlist(files)
write.csv(merged_data, file="merged_data_file.csv", row.names=FALSE)

如果至少一个 csv 设置了列名,它们将用于结果数据表。


考虑到您的代码,它可以大大改进。这:

files <- dir("test files/shortened")
files_filter <- files[grepl("*\\.csv", files)]

可以替换为:

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

在您的 for 循环中,您第一次调用 bindme 时,它什么也没做。它是什么?一个列表?数据框?你可以使用类似的东西:

bindme <- data.table() # or data.frame()

此外,部分:

write.table(levels[i],file = paste(levels[i],"-output.csv",sep=""),sep=",")

将生成多个 csv 文件,但您只需要一个合并文件。

关于r - 将一堆 csv 文件合并为一个带有标题的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31860887/

相关文章:

r - 为 linux 安装 biomaRt 包(R 版本 3.5.2)(Ubuntu for Windows)

r - 从R中的字符串中提取混合日期

r - sf 到 data.frame : why as_Spatial needed before as. data.frame

list - 哈希表与线性列表

python - 读写模式 Python CSV 文件

r - R 中每个级别的信号/行之间的距离

C# - 用另一个数组分割数组

java - 目录浏览器获得 NPE

php - 如何将 fgetcsv 与字符串一起使用

powershell - 在 powershell 中仅提取 csv 文件的前 10 行