读取并绑定多个csv文件

时间:2014-06-02 13:11:53

标签: r csv data-binding merge dataframe

我有一系列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")

3 个答案:

答案 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)