具有cor.test的Data.table

时间:2015-01-21 23:08:33

标签: r data.table

当我使用data.table使用cor.test函数计算每个组的相关性时,它适用于默认方法(#34; pearson")但不适用于"斯皮尔曼&#34 ;.我收到data.table错误。

library("data.table")
dd <- data.table(group=sample(letters[1:3], 50, replace=TRUE), x=rnorm(50), y=rnorm(50))
head(dd)
## group          x            y
## 1:     c  0.1808595  2.124721051
## 2:     a  0.2492086  0.112128546
## 3:     b -1.6392331 -1.823208890
## 4:     c  0.6605648  0.981215691
## 5:     c -0.4625216 -0.008350339
## 6:     b -0.2747395  1.045594928
dd[ , cor.test(x, y), by=group]  # works
dd[ , cor.test(x, y, method="spearman"), by=group]  # does not work
## Error in `[.data.table`(dd, , cor.test(x, y, method = "spearman"), by = group) : 
## Column 2 of j's result for the first group is NULL. [...]

有没有人知道如何使用不会导致错误的data.table组使用cor.test?或者,如果这不是data.table可以修复的任何东西,因为它与此处的cor.test的内容有关,任何其他可比较的(data.frame,dplyr)方式使用spearman cor.test by有效的小组?

1 个答案:

答案 0 :(得分:4)

问题是因为parameter cor.test的列表结果中返回的method="spearman"元素是NULL,这导致data.table吓坏了。

返回的错误消息明确说明了这一点:

  

第一组j的结果的第2列为NULL。 [...]

然后从结果中删除第2列,然后设置即可。

dd[ , cor.test(x, y,method="spearman")[-2], by=group]

#   group statistic   p.value   estimate null.value alternative   ...    
#1:     c      2060 0.6263233  0.1043478          0   two.sided   ...
#2:     a       262 0.5762578 -0.1909091          0   two.sided   ...
#3:     b       650 0.5667271 -0.1607143          0   two.sided   ...