想象一下,我有一个包含5列和3行的data.frame。在每列中,这三个数据是技术重复。我想做每列的均值和标准差,所以最后我会为每列提供一个均值和一个标准差。这很简单,我知道将apply 2放入2作为MARGIN。但!我真正需要的是首先计算SD,并且IF SD <0.3,然后计算平均值。如果SD> 0.3,那么我必须做一些组合(参见下面的代码;我正在尝试使用FOR循环 - 见下文 - 但是也许使用apply更高效,更容易,但我不知道如何去做)。 我有这个for循环这样做:
MEAN.REF<-numeric()
SD.REF<-numeric()
reference<-data.frame(MEAN.REF=rep(0,length(ref.data)),SD.REF=rep(0,length(ref.data))##ref.data is my data.frame with my data.
for(i in 1:3){
sd.ref<-sd(ref.data[,i])
if(sd.ref<0.3)
{
mean.ref<-mean(ref.data[,i])
reference[i,]=c(mean.ref,sd.ref)
}
else
{
comb.matrix<-combn(ref.data[,i],2,)#to have the combination matrix as an object
min.sd<-min(combn(ref.data[,i],2,sd))#select the pair of data which has the minimum sd
for(j in 1:2)#here R is working upon comb.matrix
{
sd.comb.matrix<-sd(comb.matrix[,j])
if(sd.comb.matrix==min.sd)
{
mean.ref<-mean(comb.matrix[,j])
reference[i,]=c(mean.ref,min.sd)
}
else next
}
}}
问题在于,当我使用超过3列时,我遇到了结果问题(有NA值,0 ...),我不知道如何解决它。 你能帮帮我吗?