合并多个文件时,第一个文件遗漏

时间:2014-08-21 20:21:09

标签: r for-loop merge

我正在尝试使用R合并wd中的所有“.txt”文件,并在每行的末尾附加原始文件名。现在我正在运行一个看起来像这样的for循环:

xfiles = list.files(pattern = "\\.txt$")

combinedfiles = data.frame()

for (currentFile in xfiles){
    filex = read.delim(currentFile,sep="\t",header=T,fill=T)
    filex$File.name = rep(currentFile,nrow(filex))
    combinedfiles = merge(combinedfiles,filex,all=T)
    rm(filex)
}

循环运行,并正确输出 combinedfiles 变量,但每次运行时都会输出遗漏一个文件(例如如果wd中存在4个txt文件,则在输出中只合并3个)。当一个文件位于wd中时,没有行合并到组合文件中,但列名称将添加到空白的合并文件数据框中。

有没有人知道我在合并时遇到了什么问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

当您与空data.frame合并时,不会返回任何行,但它会为每个表添加列。并且由于第一个表没有列,因此它返回第二个表的列。观察

dd<-data.frame()
d1<-data.frame(a=1:3, b=4:6)
d2<-data.frame(a=1:3, c=4:6)

merge(dd, d1)
# [1] a b
# <0 rows> (or 0-length row.names)

merge(merge(dd, d1), d2)
# [1] a b c
# <0 rows> (or 0-length row.names)

我真的很惊讶你得到任何行。所有这些文件是否共享一个公共列以进行合并?你确定merge吗?是正确的操作?

您可以先检查是否存在现有行,而不是将第一个data.frame合并为空。

for (currentFile in xfiles){
    filex = read.delim(currentFile,sep="\t",header=T,fill=T)
    filex$File.name = rep(currentFile, nrow(filex))
    if( nrow(combinedfiles)>0 ) {
        combinedfiles = merge(combinedfiles,filex,all=T)
    } else {
        combinedfiles = filex
    }
    rm(filex)
}