我有一系列csv文件(每个anum一个),具有相同的列标题和不同的行数。最初我正在阅读它们并将它们合并;
setwd <- ("N:/Ring data by cruise/Shetland")
LengthHeight2013 <- read.csv("N:/Ring data by cruise/Shetland/R_0113A_S2013_WD.csv",sep=",",header=TRUE)
LengthHeight2012 <- read.csv("N:/Ring data by cruise/Shetland/R_0212A_S2012_WD.csv",sep=",",header=TRUE)
LengthHeight2011 <- read.csv("N:/Ring data by cruise/Shetland/R_0211A_S2011_WOD.csv",sep=",",header=TRUE)
LengthHeight2010 <- read.csv("N:/Ring data by cruise/Shetland/R_0310A_S2010_WOD.csv",sep=",",header=TRUE)
LengthHeight2009 <- read.csv("N:/Ring data by cruise/Shetland/R_0309A_S2009_WOD.csv",sep=",",header=TRUE)
LengthHeight <- merge(LengthHeight2013,LengthHeight2012,all=TRUE)
LengthHeight <- merge(LengthHeight,LengthHeight2011,all=TRUE)
LengthHeight <- merge(LengthHeight,LengthHeight2010,all=TRUE)
LengthHeight <- merge(LengthHeight,LengthHeight2009,all=TRUE)
我想知道是否有更短/更整洁的方法来做到这一点,同时考虑到每次运行脚本时我都可能想要查看不同的年份。
我也找到了Tony Cookson的这段代码,看起来它会做我想要的,但是它为我生成的数据框只有正确的标题但没有数据行。
multmerge = function(mypath){
filenames=list.files(path=mypath, full.names=TRUE)
datalist = lapply(filenames, function(x){read.csv(file=x,header=T)})
Reduce(function(x,y) {merge(x,y)}, datalist)
mymergeddata = multmerge("C://R//mergeme")
答案 0 :(得分:10)
查找文件(list.files
)并循环读取文件(lapply
),然后调用(do.call
)行绑定(rbind
)将所有文件放在一起按行。
myMergedData <-
do.call(rbind,
lapply(list.files(path = "N:/Ring data by cruise"), read.csv))
答案 1 :(得分:8)
如果您正在寻找速度,请尝试以下方法:
require(data.table) ## 1.9.2 or 1.9.3
ans = rbindlist(lapply(filenames, fread))
答案 2 :(得分:1)
没有足够的代表评论,但是要回答Rafael Santos,您可以在此处使用代码在上面的答案中为lapply添加参数。 Using lapply and read.csv on multiple files (in R)