单列上的相关矩阵

时间:2017-07-25 14:34:32

标签: r

我有一个数据框,其中有一列我想按组计算相关矩阵。每个组都有相同的行数,但是由于内存限制,我不希望将其强制转换为大数据帧。有没有办法在R中执行此操作而无需重铸?

例如:

config.toml

应该返回100x100的相关矩阵

1 个答案:

答案 0 :(得分:2)

#DATA
set.seed(42)
dt <- data.table(group=rep(1:5, each = 20), value = rnorm(20 * 5))

这里是基础R

的例子

<强> 1

首先获取group的唯一元素列表,然后在对应于所有唯一cor对的value之间运行group

groups = unique(dt$group)
sapply(1:length(groups), function(i)
    sapply(1:length(groups), function(j)
        cor(x = dt$value[dt$group == groups[i]], y = dt$value[dt$group == groups[j]])))
#            [,1]         [,2]       [,3]        [,4]         [,5]
#[1,]  1.00000000  0.436949356 0.04324370 -0.03960938  0.281518699
#[2,]  0.43694936  1.000000000 0.03976509 -0.06555478  0.005944951
#[3,]  0.04324370  0.039765093 1.00000000  0.33289052  0.211291403
#[4,] -0.03960938 -0.065554780 0.33289052  1.00000000 -0.183091610
#[5,]  0.28151870  0.005944951 0.21129140 -0.18309161  1.000000000

<强> 2

另一种方法也可以在不重新设定的情况下运行,但需要将dt拆分为基于group的列表。

temp = split(dt, dt$group)
sapply(1:length(temp), function(i)
    sapply(1:length(temp), function(j)
        cor(x = temp[[i]]$value, y = temp[[j]]$value)))
#            [,1]         [,2]       [,3]        [,4]         [,5]
#[1,]  1.00000000  0.436949356 0.04324370 -0.03960938  0.281518699
#[2,]  0.43694936  1.000000000 0.03976509 -0.06555478  0.005944951
#[3,]  0.04324370  0.039765093 1.00000000  0.33289052  0.211291403
#[4,] -0.03960938 -0.065554780 0.33289052  1.00000000 -0.183091610
#[5,]  0.28151870  0.005944951 0.21129140 -0.18309161  1.000000000