1.8 拓展
1.8.1 tidyxl
tidyxl:Imports non-tabular from Excel files into R。tidyxl 将不规则数据导入R。
我们可以通过readxl包读取整洁的 Excel 数据,那如果是 Excel 的透视表怎么读取?
如果我们想要读取以下数据透视表,该如何读取?由于不是整洁的数据表,所以用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 参考资料
feather 项目地址https://github.com/wesm/feather
qs 提供接口,用于快速将R对象保存到磁盘以及从磁盘读取。该包的目标是替换R中的
saveRDS和readRDS。项目地址https://github.com/traversc/qsarrow 是 feather 的接替项目,地址https://arrow.apache.org/docs/r/
其它统计学软件数据如 spss,stata,SAs 等可用
foreign包读取tidyxl and unpivotr: https://nacnudus.github.io/spreadsheet-munging-strategies/pivot-simple.html
janitor package https://sfirke.github.io/janitor/index.html