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

R语言dplyr分组统计问题:按ProgramName统计指定列符合条件记录

解决方案

1. 正确计算指定列的总和(忽略NA值)

移除!is.na()后结果全为NA,是因为sum()函数遇到NA时默认返回NA。只需添加na.rm = TRUE参数,就能忽略NA值计算总和:

df %>%  
  group_by(ProgramName) %>%
  summarise(
    ED_sum = sum(HighSchool, na.rm = TRUE),  # HighSchool列的总和(忽略NA)
    EMP_sum = sum(Employment, na.rm = TRUE) # Employment列的总和(忽略NA)
  )

2. 统计值为1的观测数(忽略NA)

要统计HighSchool或Employment列中值为1的行数,直接判断值是否等于1,同时用na.rm = TRUE排除NA的干扰:

df %>%  
  group_by(ProgramName) %>%
  summarise(
    ED_count_1 = sum(HighSchool == 1, na.rm = TRUE),  # 统计HighSchool=1的数量
    EMP_count_1 = sum(Employment == 1, na.rm = TRUE)  # 统计Employment=1的数量
  )

如果要统计同一行中HighSchool=1 或 Employment=1的观测数(去重计数),可以用:

df %>%  
  group_by(ProgramName) %>%
  summarise(
    count_either_1 = sum(HighSchool == 1 | Employment == 1, na.rm = TRUE)
  )

3. 区分计数与求和

你的原代码sum(!is.na(HighSchool))其实是在统计该列非NA的行数(计数),如果这不是你需要的总和,就用上面的求和代码;如果确实需要统计非NA的行数,原代码是正确的。


内容的提问来源于stack exchange,提问作者alecandia84

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:42:37