从 R 中糟糕的 Excel 电子表格导入和整理

Importing and Tidying from Terrible Excel Spreadsheet in R

首先,请参阅 this url 以了解我正在格式化的数据类型的一个小示例。您会注意到我在工作表中突出显示了两个我试图 select 的区域。 selection 范围需要随着项目移入和移出数据集而动态变化。对于第一部分,我认为这段代码就足够了:

library(tidyverse)
library(readxl)

filename <- "MyDataset.xlsx"

#obtain first section of my excel spreadsheet
project_codes <- read_excel(
  path = filename,
  sheet = "Jan18",
  range = "A10:B1000",
  col_names = c("proj_num", "name")
) %>% 
  drop_na() %>% 
  filter(grepl("-", project_codes$proj_num))

第二部分是我被绊倒的地方...我想确保我 selected 的行子集与我的 'project_codes' 在另一个突出显示的区域中完全相同电子表格。

我有许多工作表的格式完全相同(并且命名约定是一致的 - Jan18、Feb18、Mar18),所以如果有人可以在解决第 1 部分后帮助我迭代工作表,那么加分。

library(tidyverse)
library(readxl)

filename <- "MyDataset.xlsx"

excel_sheets(filename) %>% 
  set_names() %>% 
  map_df(~ read_excel(
  path = filename,
  sheet = .,
  range = "A6:N1000"
) %>% 
  filter(str_detect(`#`, "-")) %>% 
  select(`#`, `PROJECT NAME`, `Status`, `Cumulative Billings`, `Billing Adjustment`, `Contract Value`), .id = "Month")

# A tibble: 8 x 7
  Month `#`       `PROJECT NAME` Status `Cumulative Billings` `Billing Adjustment` `Contract Value`
  <chr> <chr>     <chr>           <dbl>                 <dbl>                <dbl>            <dbl>
1 Jan18 1-11-0010 Project 1         715                  6723                 2138             1977
2 Jan18 1-11-0011 Project 2        1717                  8330                 8283             2588
3 Jan18 1-11-0012 Project 3        3332                  2908                 4938             7734
4 Jan18 1-11-0013 Project 4        2589                  8714                 6034             1476
5 Jan18 1-11-0014 Project 5         588                  4969                 2161             3334
6 Jan18 1-11-0015 Project 6         820                  7688                 4243             4293
7 Jan18 1-11-0020 Project 20       7287                   333                 9100             3078
8 Jan18 1-11-0030 Project 30       1564                   487                 7249             5508

map_df() 将遍历每个 sheet(使用 excel_sheets() 提取其名称)并创建一个数据框,其中有一列指示数据来自哪个 sheet .

我不得不依靠这个 将 sheet 的名称应用为它自己的列。