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

R语言dataframe按列前缀分组按行求均值的sapply简便方法咨询

实现方法

用sapply批量处理完全可以实现,具体代码如下:

# 1. 提取所有样本列的分组前缀(去掉列名中.及之后的后缀,去重得到所有分组)
groups <- unique(sub("\\..*", "", names(df)[names(df) != "Gene"]))

# 2. sapply遍历所有分组,批量计算每行均值,合并为结果数据框
mean_df <- data.frame(
  Gene = df$Gene,
  sapply(groups, function(cur_group) {
    # 匹配当前分组对应的所有列
    cols <- df[, startsWith(names(df), paste0(cur_group, "."))]
    # 按行求均值
    apply(cols, 1, mean)
  })
)

运行后输出的mean_df就是你需要的结果:

> mean_df
  Gene  A1  A2  B1  B2
1    1 1.0 2.0 1.5 1.5
2    2 1.5 1.5 2.0 2.0
3    3 2.5 3.5 3.0 4.0
4    4 4.0 4.0 5.0 5.0
5    5 4.0 5.0 5.0 4.5
6    6 5.5 6.0 5.0 3.5

代码逻辑说明

  • 先用sub函数处理列名,把.1/.2这类后缀删掉,去重后得到所有分组名A1/A2/B1/B2
  • sapply遍历每个分组名,用startsWith匹配出对应分组的所有列,再用apply按行计算均值,最终返回的矩阵会自动绑定为数据框的列,列名和分组名完全对应。

如果处理的数据量较大,也可以用rowMeans替代apply提升运行效率,把apply(cols, 1, mean)替换成rowMeans(cols)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:30:03