R语言按ID分组对A=B=1的行求和并新增列的实现问题
R dplyr 分组统计新增列解决方案
原有代码问题
- 语法错误:
mutate行末尾的管道符后多了冗余逗号,写成%>%,会直接触发语法报错 - 逻辑错误:
- 你用
case_when的分支逻辑仅会在当前行满足A==1 & B==1时执行计算,其余行直接赋值为0,无法得到全局分组统计结果 - 分支内的
sum(A)仅会对当前筛选出的符合条件行的A值求和,不是统计整个ID分组下符合条件的总行数
- 你用
正确实现代码
场景1:所有行都显示对应ID分组下A、B均为1的总行数
library(dplyr) data1 <- data %>% group_by(ID) %>% mutate(result = sum(A == 1 & B == 1)) %>% ungroup()
原理:A == 1 & B == 1 会返回逻辑值,R中逻辑值TRUE等价于1、FALSE等价于0,直接求和即可得到该分组下符合条件的总行数,整组所有行的result都会统一赋值为这个统计值。
场景2:仅当前行满足A、B均为1时显示分组统计值,其余行显示0(匹配你原有代码的分支逻辑)
library(dplyr) data1 <- data %>% group_by(ID) %>% mutate(result = ifelse(A == 1 & B == 1, sum(A == 1 & B == 1), 0)) %>% ungroup()
提示:如果数据集的A、B列存在缺失值,可在sum函数中添加
na.rm = TRUE参数,避免统计结果返回NA。
内容的提问来源于stack exchange,提问作者Ruser-lab9
相关产品推荐
相关产品推荐

