首页 > 解决方案 > R程序计算相同实验结果的平均值

问题描述

我正在工作的 R 程序需要取同一实验的所有结果的平均值。例如,有两个实验,分别是实验 1 和实验 2。实验 1 每行三个结果,实验 2 每行两个结果。程序应计算实验 1 的平均结果和实验 2 的平均结果。

cols<-c('experiment 1 result 1','experiment 1 result 2','experiment 1 result 3','experiment 2 result 1','experiment 2 result 2') 
df <- data.frame(matrix(ncol = 5, nrow = 1)) 
colnames(df)<-cols 
df[1,]<-c(1,3,2,2,4)

在给定示例的情况下,输出应为以下数据帧:

cols<-c('experiment 1','experiment 2') 
df <- data.frame(matrix(ncol = 2, nrow = 1)) 
colnames(df)<-cols 
df[1,]<-c(2,3)

取决于情况,实验的数量和每个实验的结果数量可能会有所不同。因此,我正在寻找一种通用的方法来解决这个问题。有人可以帮我解决这个问题吗?

先感谢您。

标签: rmean

解决方案


仅保留列名中的“实验”编号:

sub(' result \\d+', '', names(df))
#[1] "experiment 1" "experiment 1" "experiment 1" "experiment 2" "experiment 2"

将其用作分组变量tapply以获得:

tapply(unlist(df), sub(' result \\d+', '', names(df)), mean)
#experiment 1 experiment 2 
#           2            3 

对于超过 1 行,我们可以使用split.default

sapply(split.default(df, sub(' result \\d+', '', names(df))), rowMeans)

推荐阅读