1.8 拓展
1.8.1 tidyxl
tidyxl:Imports non-tabular from Excel files into R。tidyxl 将不规则数据导入R。
我们可以通过readxl
包读取整洁的 Excel 数据,那如果是 Excel 的透视表怎么读取?
如果我们想要读取以下数据透视表,该如何读取?由于不是整洁的数据表,所以用readxl
读取后的数据没法直接使用。但是tidyxl
配合unpivotr
包经过处理可以达到目的,如下所示:
library(tidyxl)
library(tidyverse)
library(unpivotr)
<- './data/read-write/PivotTable.xlsx'
path <- xlsx_cells(path,sheets = 1) %>%
unpivot ::filter(row>3) %>%
dplyr::filter(!is_blank) %>%
dplyrselect(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