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

使用dplyr按组获取阈值以上行的均值失败,求解决方案

按组计算阈值以上数据的均值(dplyr实现)

你的需求是按group分组后,计算每个组中b列数值大于4的行的均值,但之前的两段代码都没实现这个目标,问题出在逻辑上:

  • 第一段代码mean(b>4):b>4会生成逻辑向量(TRUE/FALSE),R中TRUE等价于1、FALSE等价于0,所以这个计算的是每组中b>4的行占比,不是数值的均值。
  • 第二段代码mean(which(b>4)):which(b>4)返回的是满足条件的行的索引位置,计算的是这些索引的平均值,和你要的b列数值完全无关。

正确实现方法

方法1:先过滤再分组汇总(最直观)

先筛选出b>4的行,再按组计算均值:

library(dplyr)

df %>%
  filter(b > 4) %>%
  group_by(group) %>%
  summarise(mean_b = mean(b))

方法2:在summarise中直接筛选(无需提前过滤)

在mean()函数里直接对b列做条件筛选,同时加上na.rm = TRUE避免某组无符合条件数据时返回错误:

library(dplyr)

df %>%
  group_by(group) %>%
  summarise(mean_b = mean(b[b > 4], na.rm = TRUE))

结果验证

用你提供的数据计算:

  • group a的符合条件数值:4.154182、5.958000、5.689609、5.003576,均值约为5.2013
  • group b的符合条件数值:5.127969、4.841127、5.796909,均值约为5.2553

两种方法都会得到这个正确结果。

内容的提问来源于stack exchange,提问作者EML

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:16:20