在R中使用do.call合并多个csv文件

14
我试图使用以下代码导入和合并一组csv文件,但好像它没有将 by=c("X","Y") 参数传递给合并函数。有什么建议如何解决这个问题吗?谢谢。

我想尝试使用以下代码导入和合并一组csv文件,但好像它没有将 by = c(“X”,“Y”)参数传递给合并函数。有什么建议如何解决这个问题吗?谢谢。

csvfiles <- list.files(path = ".", pattern='bbg_.*\\.csv$')
csvfiles <- paste("fx/",csvfiles,sep="")
csvfiles

my.df <- do.call("merge",list(lapply(csvfiles, read.csv, header = TRUE), by=c("date","fx_code")))
2个回答

35

merge 不接受超过两个 data.frame,因此您不能使用 do.call 传递更大的列表:

do.call(merge, list(iris, iris, iris))
#Error in fix.by(by.x, x) : 
#  'by' must specify one or more columns as numbers, names or logical

使用Reduce替代:

Reduce(function(x, y) merge(x, y, by="Species"), list(iris, iris, iris))
#works

非常感谢,它起作用了。我使用了import.list <- lapply(csvfiles, read.csv, header = TRUE) my.df <- Reduce(function(x, y) merge(x, y, all=FALSE,by=c("fx_code","date"),all.x=TRUE, all.y=TRUE),import.list,accumulate=F) - ec0n0micus

3

do.call 接受所有参数的列表,所以尝试使用:

my.df <- do.call("merge",append(lapply(csvfiles, read.csv, header = TRUE), list(by=c("date","fx_code")) )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接