使用R dplyr实现长格式因子数据的计数、总计与百分比汇总
高效生成调查数据汇总表(Tidyverse方案)
直接用dplyr链式操作就能一次性完成所有计算,无需拆分合并数据框,代码如下:
library(tidyverse) # 生成目标汇总表 summary_df <- df %>% # 可选:过滤未作答的空值,按需调整 filter(!is.na(Response)) %>% # 按问题+响应选项分组 group_by(Question, Response) %>% # 统计每个选项的计数,保留问题分组 summarise(Count = n(), .groups = "drop_last") %>% # 计算问题总样本数与选项占比 mutate( Total_of_Q = sum(Count), Percent_C_of_Total = round((Count / Total_of_Q) * 100, 2) # 保留两位小数,可修改 ) %>% # 取消分组,得到常规数据框 ungroup()
代码说明:
filter(!is.na(Response)):如果数据存在未作答的空值,这一步可以过滤掉,不需要则直接删除该行。group_by(Question, Response):精准定位每个问题下的不同响应选项,为计数做准备。summarise(Count = n(), .groups = "drop_last"):统计每个选项的出现次数,.groups = "drop_last"自动移除Response分组,仅保留Question分组,方便后续计算该问题的总样本数。mutate():在Question分组内,用sum(Count)得到该问题的总样本数Total_of_Q,再通过计数除以总数得到百分比,round()用于控制小数位数,提升数据可读性。ungroup():最终取消分组,避免后续操作受分组逻辑影响。
这个方案全程链式处理,数据仅经过一次流转,效率远高于拆分合并的方式,7万多行的数据集可以快速完成计算。
内容的提问来源于stack exchange,提问作者Peter King
相关产品推荐
相关产品推荐

