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

如何在R中按列后缀分组计算多行均值?

批量计算宽格式DataFrame分组行均值

针对你宽格式DataFrame中按后缀(如_0m、_1m)分组的变量,下面提供两种高效的批量计算行均值的方法,无需手动指定每个变量名:

方法1:长格式转换(推荐,可读性强)

这种方法通过宽转长、分组计算均值、长转宽的流程实现,适配所有命名规律统一的分组变量:

library(dplyr)
library(tidyr)

# 1. 将宽格式转成长格式,拆分变量名为分组与时间后缀
df_long <- df %>%
  pivot_longer(
    cols = -ID,
    names_to = c("group", "time"),
    names_sep = "_"
  )

# 2. 按ID和时间分组计算行均值
df_mean <- df_long %>%
  group_by(ID, time) %>%
  summarise(row_mean = mean(value, na.rm = TRUE), .groups = "drop")

# 3. 转回宽格式,并重命名列匹配你的期望
df_final <- df %>%
  left_join(
    df_mean %>%
      pivot_wider(
        names_from = time,
        values_from = row_mean,
        names_glue = "row_mean_{case_when(time == '0m' ~ '1', time == '1m' ~ '2')}"
      ),
    by = "ID"
  )

运行后df_final会保留原数据列,同时新增row_mean_1(对应_0m组变量的行均值)、row_mean_2(对应_1m组变量的行均值)。如果后续新增_2m、_3m这类时间后缀的变量,只需调整names_glue中的映射规则即可自动适配。

方法2:直接计算行均值(高效,适合大数据集)

如果不想转换数据格式,可结合正则匹配和rowMeans直接批量计算,性能更优:

library(dplyr)
library(stringr)
library(purrr)

# 获取所有唯一的时间后缀(排除ID列)
suffixes <- unique(str_extract(names(df)[-1], "_\\d+m$"))

# 批量生成行均值列
df_final <- df %>%
  bind_cols(
    map_dfc(suffixes, function(suf) {
      # 筛选对应后缀的变量,计算行均值
      rowMeans(df %>% select(matches(str_c("^[A-Z]_", suf))), na.rm = TRUE) %>%
        as.data.frame() %>%
        # 按需求命名列:_0m对应row_mean_1,_1m对应row_mean_2
        set_names(str_c("row_mean_", ifelse(suf == "_0m", 1, 2)))
    })
  )

补充说明

  • 两种方法都支持任意多的分组变量(如A、B、C...)和时间后缀;
  • na.rm = TRUE参数确保遇到缺失值时仍能计算有效均值;
  • 方法1逻辑清晰易维护,方法2在大数据集上运行速度更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:22:19