如何在R中自定义行顺序生成累积频率表
解决自定义顺序的累积频率表问题
要让你的函数按指定顺序输出行,核心是把定性变量转换为自定义水平的因子——因为字符型变量默认按字典序排序,而因子可以强制固定顺序。以下是修改后的完整函数:
tab_1 <- function(dataset, var){ dataset %>% # 将目标变量转换为指定顺序的因子 mutate({{var}} := factor({{var}}, levels = c("None", "0 < x < 5", "5 < x < 10", "10 < x < 20", "More than 20"))) %>% group_by({{var}}) %>% summarise(n = n(), .groups = "drop") %>% mutate(totalN = cumsum(n), percent = n / sum(n) * 100, cumpercent = cumsum(percent)) }
关键说明:
- 用
mutate({{var}} := factor(...))处理传入的变量:{{}}可以正确捕获函数参数中的变量名,:=则允许我们在保留原变量名的同时修改其类型。 levels参数严格定义了你需要的行顺序,后续的group_by和统计都会遵循这个顺序执行。.groups = "drop"用于在汇总后取消分组状态,避免后续操作出现意外问题。- 累积统计
cumsum会基于你指定的顺序计算,完全符合需求。
你之前尝试order无效,是因为字符型变量的排序逻辑是字典序(比如"0 < x <5"会排在"None"前面),而因子可以彻底规避这个问题,强制按你设定的逻辑顺序输出。
内容的提问来源于stack exchange,提问作者user23398440
相关产品推荐
相关产品推荐

