R 加载多个 excel 文件并合并
R loading multiple excel files and merge
我有许多 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
我怎样才能做到这一点?
尝试
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)
会将整个向量传递到 $source
列。
我有许多 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
我怎样才能做到这一点?
尝试
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)
会将整个向量传递到 $source
列。