如何对同一样本的重复观测值计算均值(R语言DataFrame处理)
同一样本重复观测的均值计算方案
示例数据
先确认你的输入数据结构:
df <- data.frame(sample=c('s1a', 's1b', 's2a', 's2b', 's3a', 's3b'), Mg=1:6, P=7:12, K=3:8)
方法一:基础R原生实现
无需额外安装包,用原生函数即可完成:
# 提取样本核心ID(去掉末尾的a/b) df$sample_core <- substr(df$sample, 1, nchar(df$sample) - 1) # 按核心ID分组,计算各指标均值 df_new <- aggregate(. ~ sample_core, data = df[, -1], FUN = mean) # 重命名列名匹配需求 colnames(df_new)[1] <- "sample"
方法二:tidyverse工具链实现
用dplyr做数据处理、stringr处理字符串,代码更简洁直观:
# 未安装包的话先执行安装 # install.packages(c("dplyr", "stringr")) library(dplyr) library(stringr) df_new <- df %>% # 移除样本名末尾的a或b,生成核心样本ID mutate(sample = str_remove(sample, "[ab]$")) %>% # 按核心样本ID分组 group_by(sample) %>% # 对Mg、P、K列批量计算均值,最后取消分组 summarise(across(c(Mg, P, K), mean), .groups = "drop")
最终输出结果
两种方法都会得到符合要求的结果:
> df_new sample Mg P K 1 s1 1.5 7.5 3.5 2 s2 3.5 9.5 5.5 3 s3 5.5 11.5 7.5
内容的提问来源于stack exchange,提问作者Valentina
相关产品推荐
相关产品推荐

