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

使用R dplyr分组计算均值并保留组内不变的非数值列

解决方案

你可以通过以下几种实用方式实现需求,核心逻辑是保留组内取值唯一的非数值列,同时计算数值列的分组均值:

方法1:将非数值列加入分组变量

由于state和region在每个team组内取值完全一致,直接把它们加入group_by即可,分组后计算数值列均值时,这些非数值列会自然保留:

library(dplyr)

df %>%
  group_by(team, state, region) %>%
  summarise(
    pts = mean(pts),
    rebs = mean(rebs),
    ast = mean(ast),
    .groups = "drop"  # 取消分组状态,返回普通数据框
  )

方法2:用across批量处理不同类型列

如果列数较多,across能高效分别处理非数值列(取唯一值)和数值列(算均值):

df %>%
  group_by(team) %>%
  summarise(
    # 组内非数值列取值一致,取第一个值或唯一值都可
    across(c(state, region), first),
    # 批量计算数值列的均值
    across(c(pts, rebs, ast), mean),
    .groups = "drop"
  )

方法3:使用reframe函数(dplyr 1.0.0及以上版本)

reframe支持为每列单独指定处理逻辑,自动返回扁平化的数据框:

df %>%
  group_by(team) %>%
  reframe(
    state = unique(state),
    region = unique(region),
    pts = mean(pts),
    rebs = mean(rebs),
    ast = mean(ast)
  )

注意事项

  • 需确保state和region在每个team组内确实只有唯一值,若组内存在多值,以上方法会返回该组的所有唯一值,导致行数增加。
  • .groups = "drop"用于取消分组状态,若后续操作需要保留分组可省略该参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:05:54