2014-09-21 53 views
-3

作为项目的一部分,我需要在csv文件的各个列之间执行anova分析。有没有什么办法可以编写一个循环来执行所有列之间的anova而不是单独执行?
现在我正在使用下面的代码。从R环中选择最高的F值

anova(colx,col1) 
anova(colx,col2) 
. 
. 
. 
anova(colx,coln) 

我想自动执行此过程并选择给出最大F值的列。

+0

一种方法将结合'combn()',' lapply()','anova()',通过'[['然后搜索最大统计量...,没有样本数据,这就是我要去的那一部分的提取 – Chase 2014-09-21 01:12:20

+0

你能更具体一些请? – 2014-09-21 01:17:58

+1

什么版本的'anova()'接受那样的列名?尝试做一个实际的[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – MrFlick 2014-09-21 02:29:15

回答

1

如果DDF是具有所有列(mtcars在这里举例)数据帧,尝试:

ddf = mtcars 
maxfval=0; a=1; b=1 
len= length(ddf) 
for(i in 1:len) for(j in 1:len){ 
    if(i!=j){ 
     fval = anova(aov(ddf[,i]~ddf[,j]))$F[1] 
     if(fval>maxfval) {maxfval=fval; a=i;b=j} 
    } 
} 

cat('\nMax F value=',maxfval, '\nWith columns=',a,',',b,'\n') 

输出:

Max F value= 130.9989 
With columns= 3 , 2