我正在尝试使用所有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"))
,但是它也不起作用
答案 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)
}))