在R中,对于第三列中的每个组,在两列之间进行相关性测试

时间:2012-12-25 12:36:04

标签: r

我的数据框(g)包含2列,其中包含连续数据,其他列包含分类数据。我想测试2个连续变量之间的相关性,在第3列定义的不同组中 g(157X3000)看起来像:

     Geno          GDW         GN        M1     M2      M3
1 SB002XSB012 -17.1597630   52.31961    G/G    C/C     T/T
3 SB002XSB044  -3.6537657   53.81305    G/G    C/G     G/G
4 SB002XSB051  -7.8411596   58.05924    A/G    C/C     G/T
5 SB002XSB067   2.8412103   30.85074    A/G    G/G     G/T
6 SB002XSB073 -16.0789550  -10.09913    A/A    C/G     G/G
7 SB002XSB095   0.1759709   10.28837    A/A    G/G     T/T

我正在寻找每个M中定义的每个组中GDW和GN之间的相关性。 我试过了:

q<- function (x) {

spl<-split(g[,2:3],x)

r<-function(x) { if ((nrow(x[[1]][1]))>2)

cor.test(x[[1]][1],x[[1]][2],use="pairwise.complete.obs")[3:4] else Na
}

cor<- sapply(spl,r)

}

all.cor<- apply(g[,4:ncol(g)],2,q)

得到了:

Error in if ((nrow(x[[1]][1])) > 2) cor.test(x[[1]][1], x[[1]][2], use = "pairwise.complete.obs")[3:4] else Na : 
  argument is of length zero

并且没有解决它

任何想法

2 个答案:

答案 0 :(得分:2)

如果我理解正确,你想要计算列M1中每个值的GDW和GN之间的相关性(即,通过分割M1的每个唯一值)。

使用哈德利的plyr

require(plyr)
# assuming the data.frame is df (Note: factor M1 if necessary)
daply(df, .(M1), function(y) cor(y$GDW, y$GN))

答案 1 :(得分:0)

我认为你想要这个函数r

if ((length(x[[1]]))>2)
    cor.test(x[[1]],x[[2]],use="pairwise.complete.obs")[3:4] else NA

x[[1]]是一个向量,而x[[1]][1]是该向量的单个元素。您显然需要cor.test的向量而不是单个元素。

此外,矢量具有lengthnrow不合适。

您获得的错误是nrow(x[[1]][1])评估为NULL的结果,因此nrow(x[[1]][1]) > 2评估为logical(0)if的参数应为长度为1的logical