对数据帧中的变量子集进行Cor.test

对数据帧中的变量子集进行Cor.test,r,apply,correlation,R,Apply,Correlation,我是R新手,我正在寻找一种方法,将cor.test选择性地应用于数据帧中的一组变量。我自己制作了一个小脚本来查看,然后从cordataframe结果中选择一组相关性。我接下来要做的是对所有这些结果运行cor.test,这些结果的系数绝对值大于X 我的剧本 sortedcorlist <- function(mydataframe,method,numtoreport) { vahe<-cor(mydataframe, method=method) diag(v

我是R新手,我正在寻找一种方法,将cor.test选择性地应用于数据帧中的一组变量。我自己制作了一个小脚本来查看,然后从cordataframe结果中选择一组相关性。我接下来要做的是对所有这些结果运行cor.test,这些结果的系数绝对值大于X

我的剧本

    sortedcorlist <- function(mydataframe,method,numtoreport)
  {
   vahe<-cor(mydataframe, method=method)
   diag(vahe) <- 0
  vahe2 <- as.data.frame(vahe)
  vahe2 <- vahe2[c("axis1", "axis2", "axis3")]
  vahe2 <- as.matrix(vahe2)
  vahe2 <- as.table(vahe2)
  vahe2 <- as.data.frame(vahe2)
  head(vahe2[order(abs(vahe2[3]),decreasing=T),],n=numtoreport)
  }
If I run it on a dataframe like.

axis1   axis2   axis3   Alphaproteobacteria Actinobacteria  Gammaproteobacteria Solibacteres    Deltaproteobacteria
-0.118764   -0.028032   0.16921 15.5712530713   5.5282555283    5.773955774 11.9164619165   7.2788697789
-0.277526   0.081097    -0.079291   15.6943303205   12.2432210353   8.5456039441    5.7518488085    5.9983566146
-0.049546   0.002888    0.108965    17.9294117647   7.937254902 6.0235294118    13.0039215686   4.9098039216
-0.225758   0.043167    -0.022499   13.6838868389   12.5768757688   6.2423124231    7.3800738007    6.2115621156
0.004122    -0.017673   -0.020766   16.6099387338   11.708645337    6.3308373043    6.6712049013    5.1055139551
0.194926    -0.140736   -0.105162   17.6307007786   9.1768631813    8.1757508343    6.1179087875    3.5595105673
0.036636    0.001613    0.097292    17.1144859813   10.8644859813   6.4836448598    8.8785046729    6.4252336449
0.227766    0.321532    0.0225  17.8297278437   11.5143056525   6.5945568737    12.805303559    3.5589672017
-0.013657   -0.049475   0.145208    15.5555555556   5.7023060797    6.1635220126    12.2431865828   6.750524109
0.143307    -0.040705   0.104411    20.9752839011   7.4816299265    3.7408149633    12.4248496994   5.3440213761
所以我可以看到我感兴趣的axis1,2,3的哪些关联的绝对值大于0.5。现在,我想在第一个数据帧上为0.5提供这些列名对,然后从Betaproteobacteria/axis1到Solibacteres/axis3再到cor.test


我对R编程非常陌生,不同的应用函数等的数量已经让人困惑了。我想其中一个应该是使用+或者我应该使用某种for循环吗?

如果您将sortedcorlistklassmuld,kendall,30的值分配给一个名称,比如sorted.cors,那么您可以存储结果,然后选择符合规格的行,并在成对列上运行cor.test:

sorted.cors <- sortedcorlist(klassmuld,"kendall",30)
targets <- sorted.cors[sorted.cors[['Freq']] > 0.5 , ]
apply(targets, 1, function(ro) cor.test( klassmuld[[ ro[1] ]],
                                         klassmuld[[ ro[2] ]])$statistic )
# With your example data I get:
       4       23 
2.897042 4.180236 

请注意,正是行名成为结果向量的名称。

我认为从package psych使用corr.test更容易。您可以将数据帧作为参数传递,并获得所有成对关联。谢谢-我想我将使用psych来完成最直接的任务。但总有一天我还是要弄清楚这件事。它似乎拥有我所需要的大部分功能——尽管它往往会可怕地缩写列名,但我可以在那里使用一些易于识别的代码名,更大的问题是,它似乎只生成带有两个小数点的p值非常好——我自己也在考虑类似的问题——但正如所说,我是R的新手rahter,它的编程风格似乎与我涉足过的任何其他编程风格都大不相同,所以我理解ro[1]和2是目标中当前行的第一个和第二个元素,将它们包装到[ro[]中意味着它们的值将用于从klassmuld中获取适当的切片/列。今天很多事情似乎更清楚了——再次感谢你的回答。
sorted.cors <- sortedcorlist(klassmuld,"kendall",30)
targets <- sorted.cors[sorted.cors[['Freq']] > 0.5 , ]
apply(targets, 1, function(ro) cor.test( klassmuld[[ ro[1] ]],
                                         klassmuld[[ ro[2] ]])$statistic )
# With your example data I get:
       4       23 
2.897042 4.180236