根据工作表名称和列名称连接 Excel 文件中的列

问题描述 投票:0回答:1

我有一个包含多个

sheetnames
的 Excel 文件,并且这些工作表名称并不总是具有相同的结构。我希望能够读取 Excel 文件,仅读取一些具体表,选择一些特定列,然后创建一个串联表我有以下 Excel 文件:

File_Mother.xlsx
它有 5 个工作表,但我们只需要那些名称开头带有模式“inning_19”的工作表,因此如果“inning_195”和“inning_1988”存在于 Excel 文件中,那么它们将是我们感兴趣的,提取列
ID_MATCH
SET_GAME
以及以模式“
id_complete_game_on
”开头的所有其他列,最后创建一个列,让我知道当我们垂直
bind
所有选定的数据。例如:

File_Mother.xlsx
我有 sheet.name =“inning_195”并包含以下信息

ID_匹配 设置游戏 id_complete_game_on_field id_complete_game_on_camp
X01 M 已清除 未清除
X85 已清除 已清除
X89 已清除 已清除

File_Mother.xlsx
我有 sheet.name =“inning_1988”并包含以下信息

ID_匹配 设置游戏 id_complete_game_on_demand_one id_complete_game_on_camp
IKX01 先生 已完成 未清除
IKX02 DD 未完成 已清除
IKX03 TT 画画 已清除

在所需的数据整理之后,输出将是

ID_匹配 设置游戏 id_complete_game_on_field id_complete_game_on_camp id_complete_game_on_demand_one 工作表名称
X01 M 已清除 未清除 不适用 局_195
X85 已清除 已清除 不适用 局_195
X89 已清除 已清除 不适用 局_195
IKX01 先生 不适用 不适用 已完成 局_1988
IKX02 DD 不适用 不适用 未完成 局_1988
IKX03 TT 不适用 不适用 画画 局_1988
r import tidyverse data-wrangling readxl
1个回答
1
投票

我稍微编辑了阅读所有 Excel 表格,作者:@Jeromy Anglim。

library(dplyr)
library(purrr)

read_excel_somesheets <- function(filename, key,tibble = FALSE) {
  sheets <- readxl::excel_sheets(filename)
  x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X) %>% mutate(sheet_name = X))
  if(!tibble) x <- lapply(x, as.data.frame)
  names(x) <- sheets
  y <- x[grepl(key, names(x))] %>%
    reduce(full_join)
  y
}

那你可以试试

read_excel_somesheets("your_path/File_Mother.xlsx", "inning_19")

结果就像

  ID_MATCH SET_GAME id_complete_game_on_field id_complete_game_on_camp  sheet_name id_complete_game_on_demand_one
1      X01        M                   cleared              not cleared  inning_195                           <NA>
2      X85        Q                   cleared                  cleared  inning_195                           <NA>
3      X89        U                   cleared                  cleared  inning_195                           <NA>
4    IKX01       MR                      <NA>              not cleared inning_1988                      completed
5    IKX02       DD                      <NA>                  cleared inning_1988                  not completed
6    IKX03       TT                      <NA>                  cleared inning_1988                           draw
© www.soinside.com 2019 - 2024. All rights reserved.