当我使用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有效的小组?
答案 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 ...