在迭代中应用具有条件的函数

时间:2015-09-16 15:30:50

标签: r for-loop dataframe apply

想象一下,我有一个包含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 ...),我不知道如何解决它。 你能帮帮我吗?

0 个答案:

没有答案