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

在R语言中按唯一行名分组计算各列均值的实现方法

在R语言中按唯一行名分组计算各列均值的实现方法

嘿,我先提个小细节:你给出的矩阵代码里存在元素数量、行列数不匹配的问题(10行6列需要60个元素,但你只写了9个,列名也只有3个),我先帮你调整成符合你示例输出的合理测试数据,再给你两种实用的实现方法~


第一步:修正测试数据

先构建和你预期输出匹配的矩阵(包含重复行名,方便分组计算):

# 创建包含重复行名的测试矩阵
A <- matrix(c(5,4,2, 5,4,2,  # 行名"2.4"的两组数据
              2,3,3, 2,3,3,  # 行名"4.5"的两组数据
              4,2,4, 4,2,4), # 行名"8.5"的两组数据
            nrow = 6,
            ncol = 3,
            byrow = TRUE)
rownames(A) <- c("2.4", "2.4", "4.5", "4.5", "8.5", "8.5")
colnames(A) <- c("X1", "X2", "X3")

方法一:使用Base R原生函数(无需额外安装包)

Base R的aggregate()函数就能轻松搞定分组均值计算,步骤如下:

# 1. 将矩阵转换为数据框
df <- as.data.frame(A)
# 2. 添加行名列作为分组依据
df$group <- rownames(df)
# 3. 按group分组,计算所有列的均值
result <- aggregate(. ~ group, data = df, FUN = mean)
# 4. 整理成你想要的格式(行名为分组值,删除多余列)
rownames(result) <- result$group
result$group <- NULL

print(result)

运行后就能得到你想要的输出:

X1 X2 X3
2.4  5  4  2
4.5  2  3  3
8.5  4  2  4

方法二:使用dplyr包(代码更简洁)

如果你习惯tidyverse风格的代码,用dplyr会更直观,先确保你安装了这个包:

# 如果未安装dplyr,先运行这行
# install.packages("dplyr")

library(dplyr)

result <- as.data.frame(A) %>%
  # 添加行名列作为分组键
  mutate(group = rownames(.)) %>%
  # 按group分组
  group_by(group) %>%
  # 计算所有列的均值
  summarise(across(everything(), mean)) %>%
  # 将分组列转换为行名
  column_to_rownames(var = "group")

print(result)

这个方法用管道操作串联所有步骤,代码更紧凑,结果和方法一完全一致。


备注:内容来源于stack exchange,提问作者Francesco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:09:28