R dplyr group_by分组汇总时新增列统计每户男女数量的实现方法
你可以在分组后的summarise步骤中新增统计男女计数的逻辑即可,修改后的代码如下:
households <- df %>% mutate_if(is.character, factor) %>% group_by(hh_id, treatment) %>% summarise( # 统计每个分组的女性、男性人数 female_num = sum(sex == 1, na.rm = TRUE), male_num = sum(sex == 0, na.rm = TRUE), # 对所有数值列求均值,如果不需要sex列的均值,可以改成 across(where(is.numeric) & !sex, mean, na.rm = TRUE) across(where(is.numeric), mean, na.rm = TRUE) ) View(households)
如果你的dplyr版本低于1.0.0不支持across语法,可以用兼容写法:
households <- df %>% mutate_if(is.character, factor) %>% group_by(hh_id, treatment) %>% # 先统计每个分组的男女数量 mutate( female_num = sum(sex == 1, na.rm = TRUE), male_num = sum(sex == 0, na.rm = TRUE) ) %>% # 再对数值列求均值 summarise_if(is.numeric, mean, na.rm = TRUE)
代码说明
sum(sex == 1)会统计当前分组内sex等于1的行数,也就是女性人数,sum(sex == 0)同理统计男性人数- 参数
na.rm = TRUE是为了避免数据存在缺失值时统计结果变为NA,若你的数据无缺失可以移除该参数 - 如果你不需要保留sex列的均值结果,只需要在
across的筛选条件中排除sex列即可。
内容的提问来源于stack exchange,提问作者BigDawg007
相关产品推荐
相关产品推荐

