如何在R语言dplyr的summarize调用中统计分组内符合条件的行数
解决方法:在dplyr的summarize中统计分组异常值数量
我来帮你搞定这个问题!你想要在dplyr的summarize()调用里同时计算主场/客场的总分和异常值(得分>300)数量,其实有两种简洁的方式可以实现,完全不需要跳出summarize。
方法1:利用已有的more_than_300列
既然你已经预先创建了标记异常值的列,直接对这个列求和就行——因为在R里TRUE会被视为1,FALSE视为0,求和的结果就是异常值的数量:
test %>% group_by(location) %>% summarize( total_score = sum(score), n_outliers = sum(more_than_300) )
方法2:直接在summarize中判断条件(更推荐)
如果不想依赖预先创建的more_than_300列,你可以直接在summarize里写入判断逻辑,一步到位:
test %>% group_by(location) %>% summarize( total_score = sum(score), n_outliers = sum(score > 300) )
为什么你之前的代码失败?
你尝试的nrow(.[more_than_300 == FALSE])有两个问题:
- 逻辑搞反了:你要统计的是超过300的异常值,对应
more_than_300 == TRUE,而不是FALSE; - 在分组的
summarize里,用nrow()去子集数据不是最优写法,而且不如sum()统计逻辑值简洁高效。
运行上面的代码后,你会得到正确的结果:
- 主场(home)总分552,异常值数量0;
- 客场(away)总分927,异常值数量2。
内容的提问来源于stack exchange,提问作者J.Sabree
相关产品推荐
相关产品推荐

