不同分组下嵌套dplyr::summarise 无需left_join的实现咨询
无需left_join的实现方案
直接在同一管道流里就能完成两类统计,完全不用跨表关联,比原写法更简洁:
data %>% # 按BMI分组提前算出全组的高WC占比,给组内每个样本赋同一个值 group_by(bmiclass) %>% mutate(risk.wc = sum(wcclass) / n() * 100) %>% # 切到BMI+WC双维度分组,计算细分维度的死亡风险 group_by(bmiclass, wcclass) %>% summarise( risk.death = sum(deceased) / n() * 100, # 组内的高WC占比是固定值,提取任意样本的结果即可 risk.wc = first(risk.wc) )
逻辑说明
- 核心思路是把“按BMI分组的高WC占比”归为BMI组的固定属性:在原始数据层面给所有同BMI的样本打上对应占比的标签,后续拆分WC分组时,这个值不会随分组变化
- 用
first()提取占比是因为同分组内的该值完全一致,取哪个位置的结果都相同,比起两次分组再加left_join的写法,少了一步数据拆分和键值匹配的过程,执行效率更高 - 最终输出的统计结果和你之前用关联方法得到的结果完全一致,没有任何数值偏差
内容的提问来源于stack exchange,提问作者Devanto
相关产品推荐
相关产品推荐

