14.2 Exploring

14.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() 中呈现

col or
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 元素:

14.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() 并指定除数

14.2.5 excel_numeric_to_date

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