R语言中group_by与mutate实现分组占比计算的简化方法问询
简化方案:一步完成所有统计与占比计算
完全可以简化成一步操作,用dplyr的链式调用就能搞定,不用拆分多个中间表,避免冗余的分组和表连接:
share_data <- df %>% group_by(DEP) %>% summarise( total_count = n(), # 统计每组总行数 filter_count = sum(T_depart >= 60, na.rm = TRUE), # 统计每组T_depart≥60的行数,na.rm用于处理缺失值 share_dep = filter_count / total_count # 直接计算占比 )
代码说明:
group_by(DEP):一次性按DEP分组,后续所有统计都基于这个分组逻辑n():直接获取当前分组的总行数,不用单独生成统计表sum(T_depart >= 60, na.rm = TRUE):利用R中逻辑值自动转数值的特性(TRUE=1,FALSE=0),求和得到符合条件的行数;如果你的数据里没有缺失值,可以去掉na.rm = TRUE- 最后直接在
summarise里计算占比,省去了后续left_join的步骤,也避免了列名混淆的问题
补充纠正:
原代码里的share_dep=n.x/n.y计算逻辑是反的,正确占比应该是筛选行数/总行数,也就是n.y/n.x,上面的简化代码直接从源头避免了这个易错点。
内容的提问来源于stack exchange,提问作者Sony
相关产品推荐
相关产品推荐

