R程序计算相同实验结果的平均值

R程序计算相同实验结果的平均值,r,mean,R,Mean,我正在编写一个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(nc

我正在编写一个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仅保留列名中的“实验”编号:

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行,我们可以使用拆分。默认值为:

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

非常感谢,这已经是非常好的一步了。我可以再问你一个问题吗:如果你有多行实验,你会如何解决这个问题,例如,
df[2],在这种情况下,预期的输出是什么?你需要的是罗维平均还是完全平均?对不起,我应该提到这一点。我想要一个行平均值。更新答案以使用
split.default
sapply(split.default(df, sub(' result \\d+', '', names(df))), rowMeans)