将来自多个 Excel 工作簿的数据与多个 Excel 工作表合并到一个 R 数据框中
Merging data from multiple Excel workbooks with multiple Excel worksheets into an R dataframe
我正在尝试将多个 Excel 工作簿(每个工作簿都有多个 sheet)中的特定单元格范围合并到一个 R 数据框中。每个 Excel 工作簿都有一个我想忽略的 'Instructions' sheet,然后所有后续 sheet 都采用相同的布局(我想 select 个细胞 H4:R17 个)。到目前为止,我已经设法将所有工作簿中所有工作 sheet 的所有单元格合并到一个非常混乱的数据框中。但是,我正在努力确定正确的代码以在读取此代码时忽略 'Instructions' sheet 并按所需的单元格范围 (H4:R17) 进行子集化。我在下面包含了我的代码:
有什么想法吗?
#how to join multiple files based on multiple sheets
read_multiple_excel <- function(path) {
path %>%
excel_sheets() %>%
set_names() %>%
map_df(read_excel,path = path)
}
#joining all data.frames
data_df <- dir_ls(regexp = "xlsx") %>%
map_df(read_multiple_excel,
.id = "workbook_name")
str(data_df)
library(tidyverse)
library(readxl)
files <- list.files(
path = "./sourse/xlsx",
pattern = "\.xlsx$",
full.names = T
)
文件列表
[1] "./sourse/xlsx/df1.xlsx" "./sourse/xlsx/df2.xlsx"
sheet 个文件的列表
link <- data.frame(files = files) %>%
mutate(sheets = map(files, excel_sheets)) %>%
unnest(sheets) %>%
filter(sheets != "instruction")
# A tibble: 4 x 2
files sheets
<chr> <chr>
1 ./sourse/xlsx/df1.xlsx sh1
2 ./sourse/xlsx/df1.xlsx sh2
3 ./sourse/xlsx/df2.xlsx sh1
4 ./sourse/xlsx/df2.xlsx sh2
结果
map2_df(.x = set_names(link$files), .y = link$sheets, read_xlsx, .id = "workbook", range = "A1:B3")
# A tibble: 8 x 3
workbook x y
<chr> <dbl> <dbl>
1 ./sourse/xlsx/df1.xlsx 1 3
2 ./sourse/xlsx/df1.xlsx 2 4
3 ./sourse/xlsx/df1.xlsx 5 7
4 ./sourse/xlsx/df1.xlsx 6 8
5 ./sourse/xlsx/df2.xlsx 9 11
6 ./sourse/xlsx/df2.xlsx 10 12
7 ./sourse/xlsx/df2.xlsx 13 15
8 ./sourse/xlsx/df2.xlsx 14 16
我正在尝试将多个 Excel 工作簿(每个工作簿都有多个 sheet)中的特定单元格范围合并到一个 R 数据框中。每个 Excel 工作簿都有一个我想忽略的 'Instructions' sheet,然后所有后续 sheet 都采用相同的布局(我想 select 个细胞 H4:R17 个)。到目前为止,我已经设法将所有工作簿中所有工作 sheet 的所有单元格合并到一个非常混乱的数据框中。但是,我正在努力确定正确的代码以在读取此代码时忽略 'Instructions' sheet 并按所需的单元格范围 (H4:R17) 进行子集化。我在下面包含了我的代码:
有什么想法吗?
#how to join multiple files based on multiple sheets
read_multiple_excel <- function(path) {
path %>%
excel_sheets() %>%
set_names() %>%
map_df(read_excel,path = path)
}
#joining all data.frames
data_df <- dir_ls(regexp = "xlsx") %>%
map_df(read_multiple_excel,
.id = "workbook_name")
str(data_df)
library(tidyverse)
library(readxl)
files <- list.files(
path = "./sourse/xlsx",
pattern = "\.xlsx$",
full.names = T
)
文件列表
[1] "./sourse/xlsx/df1.xlsx" "./sourse/xlsx/df2.xlsx"
sheet 个文件的列表
link <- data.frame(files = files) %>%
mutate(sheets = map(files, excel_sheets)) %>%
unnest(sheets) %>%
filter(sheets != "instruction")
# A tibble: 4 x 2
files sheets
<chr> <chr>
1 ./sourse/xlsx/df1.xlsx sh1
2 ./sourse/xlsx/df1.xlsx sh2
3 ./sourse/xlsx/df2.xlsx sh1
4 ./sourse/xlsx/df2.xlsx sh2
结果
map2_df(.x = set_names(link$files), .y = link$sheets, read_xlsx, .id = "workbook", range = "A1:B3")
# A tibble: 8 x 3
workbook x y
<chr> <dbl> <dbl>
1 ./sourse/xlsx/df1.xlsx 1 3
2 ./sourse/xlsx/df1.xlsx 2 4
3 ./sourse/xlsx/df1.xlsx 5 7
4 ./sourse/xlsx/df1.xlsx 6 8
5 ./sourse/xlsx/df2.xlsx 9 11
6 ./sourse/xlsx/df2.xlsx 10 12
7 ./sourse/xlsx/df2.xlsx 13 15
8 ./sourse/xlsx/df2.xlsx 14 16