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

R语言如何按ID分组对数据框多列批量应用去均值函数

批量分组去均值实现方案

以下方案完全适配你现有的dplyr工作流,和你单处理esgscore列的逻辑、输出结果完全对齐:

1. 保留分组均值中间列的写法(完全匹配你现有单列逻辑的输出格式)

直接复用你单列处理时「生成分组均值列、生成去均值结果列」的规则,批量处理3-111列:

demeaned_df <- df %>%
  group_by(ID) %>%
  mutate(
    across(
      .cols = 3:111,
      .fns = list(
        # 分组均值计算逻辑
        avg = ~ mean(.x),
        # 去均值计算逻辑
        demeaned = ~ .x - mean(.x)
      ),
      # 列名自动按「类型_原列名」规则生成,和你原单列的命名规则完全一致
      .names = "{.fn}_{.col}"
    )
  ) %>%
  ungroup()

2. 精简版(不需要保留分组均值中间列时使用)

如果你只需要去均值结果、不需要单独留存分组均值的中间变量,可以直接一步计算,运行效率更高:

demeaned_df <- df %>%
  group_by(ID) %>%
  # 直接在分组内算每列均值并做差,生成去均值结果
  mutate(across(3:111, ~ .x - mean(.x), .names = "demeaned_{.col}")) %>%
  ungroup()

注意事项

  • 此处的3:111是按数据框当前的列顺序定位范围,如果你后续调整了df的列排序,这个索引范围会同步变动;如果想要写法更稳健,可以把3:111替换为对应列的匹配规则,比如所有数值型列就替换为where(is.numeric),或按列名前缀匹配替换为starts_with("你的列名前缀")
  • 原列存在缺失值时,默认mean(.x)会返回NA,若需要忽略缺失值计算均值,只需在对应函数里补充na.rm = TRUE参数即可
  • 处理完成后一定要调用ungroup()取消分组状态,避免后续操作默认按ID分组,出现预期外的结果

可以先单独拿esgscore列跑两种写法,和你原单列代码的输出结果做对比,确认完全一致后再运行全量数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 02:24:02