You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:07:38