R语言按id分组统计每组内列值为A的数量实现方法问询
问题原因
你原来的代码中row_number()函数的作用是返回分组内当前行的行序号,无法统计整个分组中符合value == "A"条件的总记录数,因此无法得到预期结果。
正确实现代码(dplyr版本)
library(dplyr) df1 <- df %>% group_by(id) %>% mutate(number_A = sum(value == "A", na.rm = TRUE)) %>% ungroup() # 不需要后续分组操作的话可以加上解除分组
逻辑说明
value == "A"会对每一行返回布尔值,等于"A"为TRUE,否则为FALSE,遇到NA会返回NAsum()计算时自动将TRUE转为1、FALSE转为0,加上na.rm = TRUE参数可以忽略NA值的干扰,统计出当前id分组下value为"A"的总个数mutate()会将分组统计得到的总个数填充到该id分组的所有行,完全匹配你预期的输出格式
可选:基础R实现
如果你不想加载第三方包,可以用基础R的ave()函数实现相同效果:
df$number_A <- ave(df$value, df$id, FUN = function(x) sum(x == "A", na.rm = TRUE))
内容的提问来源于stack exchange,提问作者Yebelay Berehan
相关产品推荐
相关产品推荐

