r - 数据表中的相关矩阵

标签 r data.table correlation

如果我有以下数据表:

set.seed(1)
TDT <- data.table(Group = c(rep("A",40),rep("B",60)),
                      Id = c(rep(1,20),rep(2,20),rep(3,20),rep(4,20),rep(5,20)),
                      Time = rep(seq(as.Date("2010-01-03"), length=20, by="1 month") - 1,5),
                      norm = round(runif(100)/10,2),
                      x1 = sample(100,100),
                      x2 = round(rnorm(100,0.75,0.3),2),
                      x3 = round(rnorm(100,0.75,0.3),2),
                      x4 = round(rnorm(100,0.75,0.3),2),
                      x5 = round(rnorm(100,0.75,0.3),2))

如何按时间计算 x1、x2、x3、x4 和 x5 之间的相关性?

这个:
TDT[,x:= list(cor(TDT[,5:9])), by = Time]

不起作用。

怎么能在datatable ?

最佳答案

你的尝试是如此接近!你错过的只是一个额外的 list() .

这有效:

TDT[,x:= list(list(cor(TDT[,5:9]))), by = Time]

TDT$x返回:
[[1]]
            x1          x2          x3         x4          x5
x1  1.00000000  0.72185099  0.07368766 -0.7031890 -0.36895449
x2  0.72185099  1.00000000  0.68058833 -0.7393130  0.05066973
x3  0.07368766  0.68058833  1.00000000 -0.5021462  0.10645894
x4 -0.70318896 -0.73931299 -0.50214616  1.0000000  0.11671020
x5 -0.36895449  0.05066973  0.10645894  0.1167102  1.00000000

[[2]]
           x1         x2          x3          x4         x5
x1  1.0000000 -0.1011948 -0.85191422 -0.15571603  0.4855237
x2 -0.1011948  1.0000000  0.56691559 -0.44002621 -0.6699172
x3 -0.8519142  0.5669156  1.00000000  0.02189754 -0.6168013
x4 -0.1557160 -0.4400262  0.02189754  1.00000000  0.2236542
x5  0.4855237 -0.6699172 -0.61680132  0.22365419  1.0000000

[...]

额外的 list()需要,因为方式 data.table解析 DT[1,2] 的第二个元素句法。这已在 stackoverflow 的其他地方进行了深入讨论, most excellent answer我邀请你阅读。

作为旁注,似乎最好替换对 list() 的最外层调用。与 .()以澄清意图。我也喜欢明确地挑出引用 .SD 的列和 .SDcols .使用相同的结果,您可以将代码重写为:
TDT[, x := .(list(cor(.SD))), by = Time, .SDcols = 5:9]

关于r - 数据表中的相关矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42611836/

相关文章:

r - 从现有变量创建相关变量

r - 从 R 向量的开头和结尾剪切元素

r - 根据另一行中的条件聚合 data.table

r - ggplot错误: cannot coerce class “c(” gg“,”ggplot“)” to a data.frame

r - 根据另一个 data.table 的行提取 data.table 的行

r - 对多个 data.tables 执行多项操作

r - 如何在 R 中创建相关矩阵?

matlab - 典型相关分析

r - 如何在 R 中使用 3x3 窗口对光栅执行焦点操作(均值)?我有纬度/经度值

r - 按多个变量的因子水平汇总统计