【发布时间】:2015-10-29 21:42:12
【问题描述】:
我有几个 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
如何创建这些 csv 的列表,以便我可以输出合并的 csv,该 csv 将标题作为文件名,将顶部的列名作为 cmets?所以一个在 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 函数将这些 csv 合并在一起,将每个列表写入一个变量,并将每个变量写入一个表输出。但是这并没有按预期工作。
# 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=",")
}
【问题讨论】:
-
如果所有文件都具有相同的结构,您可以使用
data.table包中的rbindlist。 -
我应该如何使用 rbindlist 和 for 循环?我正在考虑将它放在 write.table 行之前的第一个 for 循环中,但是我不知道如何调用由第二个 for 循环生成的每个 data.table。