R加载多个excel文件并合并

时间:2015-05-30 20:49:00

标签: r loops merge excel-2007 lapply

我有许多excel文件需要加载并合并到一个数据框中。

以下脚本有效!但是,在合并所有文件之前,我想将每个文件名粘贴到一个新列中。

library(gdata)
library(tools)
filelist <- list.files(pattern = "*\\.xlsx$")
files = lapply(filelist, read.xls, header=TRUE)

new = Reduce(function(...) merge(..., all=T), files)

所以我补充说:

files$source <- file_path_sans_ext(filelist)

但是,这没有用。

我想要的输出是:

Col1 Col2 Col3 Source(this column doesnt exist in excel)
abc  1    2    Filename1
def  3    4    Filename2

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

尝试

library(tools)
source <- file_path_sans_ext(filelist)
files1 <- Map(cbind, files, Source=source)
files1
#[[1]]
#  Col1      Col2   Source
#1    A 0.5365853 Filname1
#2    A 0.4196231 Filname1

#[[2]]
# Col1     Col2   Source
#1    A 0.847460 Filname2
#2    C 0.266022 Filname2

#[[3]]
# Col1       Col2   Source
#1    C -0.4664951 Filname3
#2    C -0.8483700 Filname3

数据

set.seed(24)
files <- lapply(1:3, function(i) data.frame(Col1=sample(LETTERS[1:3], 2, 
         replace=TRUE), Col2=rnorm(2)))
 filelist <- paste0('Filname', 1:3, '.txt')

答案 1 :(得分:1)

或者循环解决方案将源文件的名称传递给构成要合并的数据集的数据框。

for (i in length(files)) {
    dta <- files[[i]]
    dta$source <- filelist[[i]]
    files[[i]] <- dta
}

我把它分解成你最初建议的块:

files$source <- file_path_sans_ext(filelist)

会将整个矢量传递到$source列。