15 Janitor

http://sfirke.github.io/janitor/articles/janitor.html

Janitor(Firke 2019) 包提供了一些简单易用的函数方便数据清洗和探索流程。

15.1 清洗

15.1.1 clean_names

clean_names() 将输入数据框的列名转换为整洁格式,与 readxl::read_excel()readr::read_csv() 等不会擅自修改原列名的函数搭配使用效果最佳。 clean_names()输入输出 都是数据框,这使它很适应和管道操作符 %>% 和 tidyverse 中的其他函数一同工作。

列名的转换有以下几种主要情形:

  • 统一字母的大小写,采用一致的命名方式(默认为蛇形命名法 snake_case

  • 自动为重复的列名编号,填充空的列名

  • 删除空格和某些特殊字符,如括号, œoe

  • “%” 转换至 “percent”, “#” 转换至 “number”

与 Base R 中的 make.names() 对比 (注意这个函数不是基于数据框的):

改变命名规范:

make_clean_names()clean_names() 的向量版本,它还可以传入 as_tibble() 中的 .name_repair 参数中:

15.2 探索

15.2.1 tabyl

tabyl() 的设计初衷是替代 Base R 中 table(),后者有几个缺点:

  • 不接受数据框输入
  • 不返回数据框
  • 返回的结果很难进一步修饰

tabyl() 用于构建 1 ~ 3 个变量的(交叉)频数表,它 建立在 dplyr 和 tidyr 之上,所以以数据框基本输入、输出对象(但也可以接受一维向量),janitor 还提供了 adorn_* 函数族对其返回的表格进行修饰。以 starwars的一个子集演示 tabyl() 的用法:


One-way tabyl

一维频数表

tably() 可以聪明地处理数据中包含缺失值的情况:

大部分 adorn_* 函数主要用于二维列联表,但也可以适用一维频数表:


Two-way tabyl

df %>% tabyl(var_1, var_2) 等同于 df %>% count(var_1, var_2)pivot_wider() 展开其中的某一列,生成列联表:

用于修饰的 adorn_* 函数有:

  • adorn_totals(c("row", "col")): 添加行列汇总

  • adorn_percentages(c("row", "col")): 将交叉表的指替换为行或列百分比

  • adorn_pct_formatting(digits, rounding): 决定百分比的格式

  • adorn_rounding(): Round a data.frame of numbers (usually the result of adorn_percentages), either using the base R round() function or using janitor’s round_half_up() to round all ties up (thanks, StackOverflow).

    • e.g., round 10.5 up to 11, consistent with Excel’s tie-breaking behavior.
    • This contrasts with rounding 10.5 down to 10 as in base R’s round(10.5).
    • adorn_rounding() returns columns of class numeric, allowing for graphing, sorting, etc. It’s a less-aggressive substitute for adorn_pct_formatting(); these two functions should not be called together.
  • adorn_ns(): add Ns to a tabyl. These can be drawn from the tabyl’s underlying counts, which are attached to the tabyl as metadata, or they can be supplied by the user.

  • adorn_title(placement, row_name, col_name): “combined” 或者 “top”,调整行变量名称的位置

注意在应用这些帮助函数时要遵从一定的逻辑顺序。例如,adorn_ns()adorn_percent_fomatting() 应该在调用 adorn_percentages() 之后。

t2 应用 adorn_* 函数:

tabyl 对象最终可以传入 knitr::kabel() 中呈现

color
gender blue blue-gray brown dark hazel yellow
female 25.0% (3) 0.0% (0) 29.4% (5) 0.0% (0) 50.0% (1) 0.0% (0)
male 75.0% (9) 100.0% (1) 70.6% (12) 100.0% (1) 50.0% (1) 100.0% (2)
Total 100.0% (12) 100.0% (1) 100.0% (17) 100.0% (1) 100.0% (2) 100.0% (2)

Three-way tabyl

tabyl() 中传入三个变量时,返回一个二维 tabyl 的列表:

这时的 adorn_* 函数将会应用于列表中的每个 tabyl 元素:

15.2.4 round_half_up

Base R 中的取整函数 round() 采取的规则是 “四舍六入五留双”(Banker’s Rounding,当小数位是 .5 时,若前一位是奇数,则进 1 ; 若前一位数偶数,则退一):

round_half_up 遵循最简单的四舍五入规则:

若希望取整到特定的小数位,例如 0, 0.25, 0.5, 0.75, 1。可以用 round_half_fraction() 并指定除数

15.2.5 excel_numeric_to_date

excel_numeric_to_date() 按照 Excel 编码日期的规则(1989/12/31 = 1) 将整数转换为数字: