条件求和代码异常:无法统计男女观测数
问题原因与修正方案
错误根源
你代码里的sum(gender=1)和sum(gender=2)是赋值操作,不是条件判断逻辑。R会把gender=1理解为给gender变量赋值1,然后对这个单个值求和,所以最终得到的男女数量全是固定值,完全不符合统计需求。
正确的条件判断应该用双等号==,用来检查gender是否等于目标值,sum函数会自动统计符合条件的行数。另外建议加上na.rm=TRUE,避免数据中存在NA值时求和出错。
修正后的代码
dat %>% group_by(cohort, grade, sy) %>% distinct(id, keep_all=TRUE) %>% summarize( n = n(), `n female` = sum(gender == 1, na.rm = TRUE), `n male` = sum(gender == 2, na.rm = TRUE) )
预期输出
基于你提供的测试数据,运行修正后的代码会得到如下结果:
| cohort | grade | sy | n | n female | n male |
|---|---|---|---|---|---|
| 1 | 9 | "17-18" | 2 | 1 | 1 |
| 1 | 10 | "18-19" | 2 | 1 | 1 |
| 1 | 11 | "19-20" | 1 | 1 | 0 |
| 1 | 12 | "20-21" | 2 | 1 | 1 |
| 2 | 11 | "20-21" | 2 | 1 | 1 |
| 2 | 12 | "21-22" | 1 | 1 | 0 |
| 2 | 9 | "17-18" | 1 | 0 | 1 |
| 2 | 10 | "18-19" | 1 | 0 | 1 |
| 2 | 11 | "19-20" | 1 | 0 | 1 |
| 2 | 12 | "20-21" | 1 | 0 | 1 |
内容的提问来源于stack exchange,提问作者helpneeder
相关产品推荐
相关产品推荐

