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
相关产品推荐
相关产品推荐

