1.8 拓展

1.8.1 tidyxl

tidyxl:Imports non-tabular from Excel files into R。tidyxl 将不规则数据导入R。 我们可以通过readxl包读取整洁的 Excel 数据,那如果是 Excel 的透视表怎么读取?

tidyxl项目地址

如果我们想要读取以下数据透视表,该如何读取?由于不是整洁的数据表,所以用readxl读取后的数据没法直接使用。但是tidyxl配合unpivotr包经过处理可以达到目的,如下所示:

PivotTable

library(tidyxl)
library(tidyverse)
library(unpivotr)

path <- './data/read-write/PivotTable.xlsx'
unpivot <- xlsx_cells(path,sheets = 1) %>% 
  dplyr::filter(row>3) %>% 
  dplyr::filter(!is_blank) %>% 
  select(row,col,data_type,character,numeric) %>% 
  behead('left',区域) %>% 
  behead('up',是否可比) %>% 
  behead('up-right',新老店) %>% 
  rename(销售额 = numeric) %>% 
  select(-character)   

unpivot
#> # A tibble: 20 x 7
#>     row   col data_type 销售额 区域  是否可比 新老店
#>   <int> <int> <chr>      <dbl> <chr> <chr>    <chr> 
#> 1     6     2 numeric       72 华北  不可比   老店  
#> 2     7     2 numeric        9 华东  不可比   老店  
#> 3     8     2 numeric       79 华南  不可比   老店  
#> 4     9     2 numeric      156 华西  不可比   老店  
#> 5    10     2 numeric      316 总计  不可比   老店  
#> 6     6     3 numeric        0 华北  <NA>     新店  
#> # ... with 14 more rows

经过上述处理,已将透视表数据转化为整洁的数据。

如果有可能的话,不要读取如此不规则的数据当作数据源

1.8.2 参考资料

  1. feather 项目地址https://github.com/wesm/feather

  2. qs 提供接口,用于快速将R对象保存到磁盘以及从磁盘读取。该包的目标是替换R中的saveRDSreadRDS。项目地址https://github.com/traversc/qs

  3. arrow 是 feather 的接替项目,地址https://arrow.apache.org/docs/r/

  4. 其它统计学软件数据如 spss,stata,SAs 等可用foreign包读取

  5. tidyxl and unpivotr: https://nacnudus.github.io/spreadsheet-munging-strategies/pivot-simple.html

  6. janitor package https://sfirke.github.io/janitor/index.html