如何对R数据框中所有分类变量批量生成频数及百分比统计表格
实现方案
你可以结合dplyr和purrr包的函数实现批量统计,以下是两种可直接运行的方案:
方案1:返回命名列表,每个元素对应单个分类变量的统计结果
library(tidyverse) # 第一步:筛选所有分类变量 factor_vars <- Chap3 %>% select(where(is.factor)) %>% names() # 第二步:批量遍历每个分类变量生成统计表格 freq_tables <- map(set_names(factor_vars), function(var) { Chap3 %>% count(.data[[var]]) %>% mutate(percent = round(n / sum(n) * 100, 1)) }) # 调用方法:查看bsex的结果直接输入 freq_tables$bsex 即可
这里用
.data[[var]]是标准求值写法,解决循环中变量名的识别问题,就是你之前批量操作失效的核心原因:直接传变量名字符串时dplyr默认会当成普通值处理,不会解析为数据框的列。
方案2:返回合并总表,所有变量的统计结果汇总展示
如果需要把所有结果整合到同一个数据框里方便导出,可以用长表转换的方法:
library(tidyverse) all_freq <- Chap3 %>% # 只保留分类变量,转换为长表 select(where(is.factor)) %>% pivot_longer(cols = everything(), names_to = "变量名", values_to = "分类取值") %>% # 按变量+分类分组统计 count(变量名, 分类取值) %>% group_by(变量名) %>% mutate(percent = round(n / sum(n) * 100, 1)) %>% ungroup()
内容的提问来源于stack exchange,提问作者Zan
相关产品推荐
相关产品推荐

