gpt4 book ai didi

r - R data.table 中组之间的相关性

转载 作者:行者123 更新时间:2023-12-04 01:51:29 26 4
gpt4 key购买 nike

如果这些值按组存储在 data.table 的单个列中(而不是将 data.table 转换为矩阵),是否可以优雅地计算值之间的相关性?

library(data.table)
set.seed(1) # reproducibility
dt <- data.table(id=1:4, group=rep(letters[1:2], c(4,4)), value=rnorm(8))
setkey(dt, group)

# id group value
# 1: 1 a -0.6264538
# 2: 2 a 0.1836433
# 3: 3 a -0.8356286
# 4: 4 a 1.5952808
# 5: 1 b 0.3295078
# 6: 2 b -0.8204684
# 7: 3 b 0.4874291
# 8: 4 b 0.7383247

有用的东西,但需要组名作为输入:
cor(dt["a"]$value, dt["b"]$value)
# [1] 0.1556371

我正在寻找更多类似的东西:
dt[, cor(value, value), by="group"]

但这并没有给我我所追求的相关性。

对于具有正确结果的矩阵,这是相同的问题。
set.seed(1)             # reproducibility
m <- matrix(rnorm(8), ncol=2)
dimnames(m) <- list(id=1:4, group=letters[1:2])

# group
# id a b
# 1 -0.6264538 0.3295078
# 2 0.1836433 -0.8204684
# 3 -0.8356286 0.4874291
# 4 1.5952808 0.7383247

cor(m) # correlations between groups

# a b
# a 1.0000000 0.1556371
# b 0.1556371 1.0000000

任何意见或帮助非常感谢。

最佳答案

使用 data.table 没有简单的方法可以做到这一点。 .您提供的第一种方式:

cor(dt["a"]$value, dt["b"]$value)

大概是最简单的了。

另一种选择是 reshape您的 data.table来自 "long"格式,到 "wide"格式:
> dtw <- reshape(dt, timevar="group", idvar="id", direction="wide")
> dtw
id value.a value.b
1: 1 -0.6264538 0.3295078
2: 2 0.1836433 -0.8204684
3: 3 -0.8356286 0.4874291
4: 4 1.5952808 0.7383247
> cor(dtw[,list(value.a, value.b)])
value.a value.b
value.a 1.0000000 0.1556371
value.b 0.1556371 1.0000000

更新:如果您使用的是 data.table版本 >= 1.9.0,那么你可以使用 dcast.data.table相反,这会快得多。查询 this post了解更多信息。
dcast.data.table(dt, id ~ group)

关于r - R data.table 中组之间的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22421542/

26 4 0