R 单列上分组的相关矩阵

R 单列上分组的相关矩阵,r,R,我有一个数据帧,它有一个列,我想按组计算相关矩阵。每个组都有相同数量的行,但由于内存限制,我不想将其转换为大数据帧。有没有一种不用重铸就能在R中实现这一点的方法 例: dt 2 另一种方法也可以不重铸,但需要将dt拆分为基于组的列表 groups = unique(dt$group) sapply(1:length(groups), function(i) sapply(1:length(groups), function(j) cor(x = dt$value[dt$g

我有一个数据帧,它有一个列,我想按组计算相关矩阵。每个组都有相同数量的行,但由于内存限制,我不想将其转换为大数据帧。有没有一种不用重铸就能在R中实现这一点的方法

例:

dt
2

另一种方法也可以不重铸,但需要将
dt
拆分为基于
组的列表

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
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

我只是在一个循环中完成了它,看起来这并不比在两个循环中完成更容易阅读或理解。你说“不”使用data.table,但我看到你使用data.table生成了你的数据集。。。。?Data.table包似乎不适用于Rv3.4.4,仅供参考。
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
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