Data.table 与 cor.test 按组
Data.table with cor.test by group
当我使用 data.table
通过 cor.test 函数计算每个组的相关性时,它适用于默认方法(即 "pearson")但不适用于 "spearman".我收到 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 的内脏有关,那么使用 spearman 的任何其他可比较的 (data.frame, dplyr) 方式cor.test 按小组行得通?
问题是因为 cor.test
for method="spearman"
的列表结果中返回的 parameter
元素是 NULL
,导致 data.table 崩溃.
返回的错误消息非常明确地说明了这一点:
Column 2 of j's result for the first group is 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 ...
当我使用 data.table
通过 cor.test 函数计算每个组的相关性时,它适用于默认方法(即 "pearson")但不适用于 "spearman".我收到 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 的内脏有关,那么使用 spearman 的任何其他可比较的 (data.frame, dplyr) 方式cor.test 按小组行得通?
问题是因为 cor.test
for method="spearman"
的列表结果中返回的 parameter
元素是 NULL
,导致 data.table 崩溃.
返回的错误消息非常明确地说明了这一点:
Column 2 of j's result for the first group is 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 ...