如何在R中合并具有不等行的多个文件

时间:2015-01-22 02:46:08

标签: r csv merge export-to-csv

我有大约100个文本文件,包含两列,大约320-500行,我想合并到一个.csv文件中。

例如,我有一个看起来像这样的文件A.
A B
1 100
2 200
3 300
4 400

和文件B看起来像这样
A B
1 100
2 200
3 300
4 400
5 300
6 400

但是,当我将此代码输入R:write.csv (data_list, ("file.csv"), row.names = FALSE, na="")时,  我收到此错误消息:"Error in data.frame(list(V1 = c(0.025, 0.035, 0.045, 0.055, 0.065, 0.075, : arguments imply differing number of rows: 500, 599, 508, 489, 547, 624, 587, 534, 499, 494, 566, 520, 541, 543, 615"


我希望我的文件看起来像这样(一个文件结合了我的两列所有100个文本文件):
文件AB
A B
1 100
2 200
3 300
4 400
1 100
2 200
3 300
4 400
5 300
6 400
在一个巨型csv文件中。如果可能,请帮助我。我是脚本新手,并会根据需要提供更多信息。

2 个答案:

答案 0 :(得分:1)

以下是实现它的不同选择。

R代码:

# Option 1: Using plyr
library(plyr)
datafiles <-list.files (pattern='*.txt') 
dataset <- ldply(datafiles, read.table, header=F)

# Option 2: Using fread
library(data.table)
datafiles <-list.files (pattern='*.txt') 
dataset = rbindlist(lapply( datafiles, fread, header=F))

# Option 3: do.call method
dataset <- do.call("rbind",lapply(datafiles,
                              FUN=function(files){read.table(files,
                                                             header=FALSE)}))

# Option 4: Loops are any time slow so avoid, but have put here just for reference
for (file in datafiles){  
  # if the merged dataset doesn't exist, create it
  if (!exists("dataset")){
    dataset <- read.table(file, header=FALSE)
  }

  # if the merged dataset does exist, append to it
  if (exists("dataset")){
    temp_dataset <-read.table(file, header=FALSE)
    dataset<-rbind(dataset, temp_dataset)
    rm(temp_dataset)
  }  
}

# Writing to csv
write.csv (dataset, ("file.csv"), row.names = FALSE, na="") 

答案 1 :(得分:1)

我认为使用dplyr或plyr包函数真是太过分了。建议尝试write.table,(因为所需的输出中没有逗号):

write.table(file_A, file="comb_file.txt")
write.table(file_B, file="comb_file.txt", append=TRUE)

你当然可以使用write.csv,但输出看起来不像你所说的那样。