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

在R语言中按种群分组计算矩阵子组均值的方法咨询

在R中计算每个种群的样本均值

完全可以实现,以下是几种实用的方法,以示例数据为例:

1. 构造示例数据

先模拟一个符合你描述的矩阵,行名为sX-Y格式(X是种群编号,Y是样本编号):

set.seed(123)
# 10个样本,3个特征的矩阵
mat <- matrix(rnorm(30), nrow=10, dimnames = list(
  c("s1-1", "s1-2", "s1-3", "s2-1", "s2-2", "s2-3", "s3-1", "s3-2", "s3-3", "s3-4"),
  paste0("feature", 1:3)
))

2. 提取种群分组信息

从行名中拆分出种群标识,这里用正则表达式提取-之前的部分:

# 提取种群分组,结果为c("s1","s1","s1","s2","s2","s2","s3","s3","s3","s3")
groups <- sub("-.*", "", rownames(mat))
# 如果只需要数字编号,用这行:groups <- as.integer(sub("s(\\d+)-.*", "\\1", rownames(mat)))

3. 计算种群均值

方法一:基础R(tapply + apply)

适合习惯基础语法的用户,直接对矩阵操作:

# 按特征列计算每个种群的均值,转置后让行是种群,列是特征
pop_means <- t(apply(mat, 2, function(col_data) tapply(col_data, groups, mean)))

方法二:基础R(aggregate)

通过转成数据框实现,结果更易读:

# 转置矩阵(让样本列转成行),添加分组列
df <- cbind(t(mat), group = groups)
# 按分组计算各特征均值
pop_means_agg <- aggregate(. ~ group, data = as.data.frame(df), mean)
# 转成矩阵格式(可选)
pop_means_agg <- as.matrix(pop_means_agg[, -1])
rownames(pop_means_agg) <- unique(groups)

方法三:tidyverse工具包(dplyr + tidyr)

适合数据处理流程化的场景:

library(dplyr)
library(tidyr)

pop_means_tidy <- mat %>%
  as.data.frame() %>%
  # 添加样本名和种群分组列
  mutate(sample = rownames(.), group = sub("-.*", "", sample)) %>%
  select(-sample) %>%
  # 按分组聚合,计算每个特征的均值
  group_by(group) %>%
  summarise(across(everything(), mean)) %>%
  # 把种群列设为行名,转成矩阵
  column_to_rownames("group") %>%
  as.matrix()

最终得到的pop_means类对象,每行对应一个种群,每列对应特征的均值,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:01:55