我有许多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
我怎样才能做到这一点?
答案 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
列。