使用reduce合并多个csv文件,这些文件具有多于一列的条件和不同的长度

时间:2018-12-03 15:32:26

标签: r

我正在尝试使用所有Excel文件中共有的3列从87个.cvs文件创建一个数据帧。公用列为Date CowID Time,但是文件包含几个不通用但需要合并的列。每个文件的长度也不同,所以我猜最后的data.frame会有很多NA。我没有读取文件的问题。我找到了使用Merge several data.frames into one data.frame with a loop执行此操作的代码。

filenames <- list.files(path= "...\\data\\dat_merge", full.names=TRUE)
library(plyr)
import.list <- llply(filenames, read.csv)
data <- Reduce(function(x, y) merge(x, y, all=TRUE, 
                                    by.x=c("Date", "CowID", "Time"),             
                                    by.y=c("Date", "CowID", "Time")),
                                    import.list, accumulate=F)`

但是,当我尝试使用reduce合并文件时,出现错误:

  

fix.by(by.y,y)中的错误:“ by”必须指定唯一有效的列

我不知道问题是否是因为共同的一栏是日期,并且它是一个类似11/24/2018的字符。

我尝试使用x <- multimerge(my_data, all = TRUE, by=c("Date", "CowID", "Time")),但是它也不起作用

1 个答案:

答案 0 :(得分:0)

这是我要解决的方法: 使用lapply读取所有文件,并仅提取所需的列。 然后使用do.call(“ rbind”,)合并数据帧。

data=do.call("rbind",lapply(filenames,function(f){
        temp=read.csv(f)
        temp=temp[,c("Date", "CowID", "Time")]
        return(temp)
    }))