R加载多个excel文件并合并
我有许多excel文件需要加载并合并到单个数据框中 下面的脚本有效!但是,在合并所有文件之前,我想将每个文件名粘贴到一个新列中R加载多个excel文件并合并,r,loops,merge,excel-2007,lapply,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) 我怎样才
library(gdata)
library(tools)
filelist <- list.files(pattern = "*\\.xlsx$")
files = lapply(filelist, read.xls, header=TRUE)
new = Reduce(function(...) merge(..., all=T), files)
我怎样才能做到这一点呢?试试看
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
库(工具)
source或循环解决方案,将源文件的名称传递给构成要合并的数据集的数据帧
for (i in length(files)) {
dta <- files[[i]]
dta$source <- filelist[[i]]
files[[i]] <- dta
}
for(长度为i(文件)){
dta您好Konrad,我尝试过这个方法,但是我在文件列表[[I]]中收到了一条错误消息error:下标越界-有什么想法吗?非常感谢-Peddie看起来您的文件名向量比数据集列表中的元素多。如果使用长度(文件列表),您可以看到会发生什么
但原则上你会期望两个对象都有相应数量的元素。我很新,请原谅我的无知。我目前只有11个文件,但预计会增加。所以我只为列表编写文件模式XLSX。当我使用长度(filelist)时它返回12。你知道为什么吗?我希望过滤器会找到另一个文件(临时的,隐藏的?)。如果没有可复制的示例,很难推测。我最终到达了那里,我认为这是正确的,但是当我检查数据时,数组的最后一个文件被填入了源列(本例为9月,其余行显示为NA)。知道我做错了什么吗?谢谢-佩迪耶也尝试了这一次,但在点[[2L]][[1L]]中出现了一个错误:类型为“Close”的对象不可再附加…不确定我做错了什么。非常感谢您的帮助。Peddie@PeddiePooh在一个示例中,我创建的数据是有效的。因此,如果没有示例,很难知道问题出在哪里。@PeddiePooh为了重现我的代码是有效的,我添加了一些example@akun我设法将源文件作为使用files$source@PeddiePooh Yourfiles
的新列是一个列表,可以使用for
循环forlappy/Map
解决方案访问该列表。请仔细查看我的示例和代码。
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')
for (i in length(files)) {
dta <- files[[i]]
dta$source <- filelist[[i]]
files[[i]] <- dta
}
files$source <- file_path_sans_ext(filelist)