有什么方法可以直接从装饰函数中得到下面的输出吗?
library(janitor)
library(stringr)
df <- mtcars %>%
tabyl(am, cyl) %>%
adorn_totals(c("row", "col")) %>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front")
df
# am 4 6 8 Total
# 0 3 (15.79%) 4 (21.05%) 12 (63.16%) 19 (100.00%)
# 1 8 (61.54%) 3 (23.08%) 2 (15.38%) 13 (100.00%)
# Total 11 (34.38%) 7 (21.88%) 14 (43.75%) 32 (100.00%)
df$Total <- str_replace(df$Total, " \\s*\\([^\\)]+\\)", "")
df[df$am == "Total",] <- str_replace(df[df$am == "Total",], " \\s*\\([^\\)]+\\)", "")
df
# am 4 6 8 Total
# 0 3 (15.79%) 4 (21.05%) 12 (63.16%) 19
# 1 8 (61.54%) 3 (23.08%) 2 (15.38%) 13
# Total 11 7 14 32
3条答案
按热度按时间jm2pwxwz1#
这不仅是
janitor
的解决方案,而且是使用dyplr
和readr
的一次运行的解决方案:我们在代码中添加一行
mutate(across...
,其中case_when
条件仅针对特定行,并且(技巧)使用parse_number
(自动提取第一个数字)。第二步是对Total列使用parse_number
:kq0g1dla2#
从本质上讲,问题是在创建百分比后要调用
adorn_totals()
,但不能这样做,因为这样做是在处理具有"3 (15.79%)"
这样的值的字符列,不能对它们求和。我只需要创建一个函数来计算一个数据框中的总数和另一个数据框中的百分比,并将它们连接在一起:
然后,您可以执行以下操作:
xjreopfe3#
我们可以在一些
adorn
函数中使用整理选择选项或者使用group_modify