You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:06:05