我有多个excel文件,我只想基于工作表将它们附加到单个excel文件中(例如,工作表1的数据始终附加到工作表1上,对于工作表2依此类推)。
我只想保留任何一个文件的一个标题,而在附加其他文件时,我要删除标题列。
到目前为止,我已经尝试过了。
library(dplyr)
library(xlsx)
path<- "C:/Users/KJD14/Documents/Test - "
dataFolders<- list.files(path,pattern = "*.xlsx")
dataFolders<- sort(dataFolders[starts_with(match = "Test - ", vars = dataFolders)])
files<- lapply(lapply(dataFolders, FUN = function(x){
paste(path,x,sep = "/")
}), FUN = function(x){
list.files(x, pattern = "*.xlsx", full.names = TRUE)
})
答案 0 :(得分:1)
使用此方法,您可以阅读一个excel文件的所有表格
library(data.table)
library(readxl)
# Using the example excel file and only read in the first sheet three times
list.import <- lapply(rep(excel_sheets(readxl_example("datasets.xlsx"))[1],3), function(sheet){read_xlsx(readxl_example("datasets.xlsx"), sheet = sheet )})
dt <- rbindlist(list.import)
如果需要,还可以使用附加循环读取多个excel文件。 我刚刚找到了一个新软件包,该软件包目前仅在github上,但可能可以安装。 所以请结帐: example 要安装:
install.packages("devtools")
library(devtools)
writexl::write_xlsx(dt, path = "temp.xlsx")
请注意,我尚未检查代码的最后几行是否正常运行,因此请自行进行测试。
答案 1 :(得分:0)
这里是一个选项,它返回一个数据框,其中包含用于文件的列和用于每个文件的工作表名称。在此示例中,并非每个文件都具有相同的工作表或列。 test2.xlsx只有一张纸,而test3.xlsx sheet1没有col3。
library(tidyverse)
library(readxl)
dir_path <- "~/test_dir/" # target directory where the xlsx files are located.
re_file <- "^test[0-9]\\.xlsx" # regex pattern to match the file name format, in this case 'test1.xlsx', 'test2.xlsx' etc.
read_sheets <- function(dir_path, file){
xlsx_file <- paste0(dir_path, file)
xlsx_file %>%
excel_sheets() %>%
set_names() %>%
map_df(read_excel, path = xlsx_file, .id = 'sheet_name') %>%
mutate(file_name = file) %>%
select(file_name, sheet_name, everything())
}
df <- list.files(dir_path, re_file) %>%
map_df(~ read_sheets(dir_path, .))
# A tibble: 15 x 5
file_name sheet_name col1 col2 col3
<chr> <chr> <dbl> <dbl> <dbl>
1 test1.xlsx Sheet1 1 2 4
2 test1.xlsx Sheet1 3 2 3
3 test1.xlsx Sheet1 2 4 4
4 test1.xlsx Sheet2 3 3 1
5 test1.xlsx Sheet2 2 2 2
6 test1.xlsx Sheet2 4 3 4
7 test2.xlsx Sheet1 1 3 5
8 test2.xlsx Sheet1 4 4 3
9 test2.xlsx Sheet1 1 2 2
10 test3.xlsx Sheet1 3 9 NA
11 test3.xlsx Sheet1 4 7 NA
12 test3.xlsx Sheet1 5 3 NA
13 test3.xlsx Sheet2 1 3 4
14 test3.xlsx Sheet2 2 5 9
15 test3.xlsx Sheet2 4 3 1
然后导出到单个XLSX文件:
library(xlsx)
write.xlsx(df, 'file_name.xslx', sheetName="Sheet1", row.names=TRUE)