R:将大数据帧转换为成对的相关矩阵

问题描述 投票:0回答:1

我有以下形式的数据:

df <- data.frame(group = c(rep(1,5),rep(2,5),rep(3,5),rep(4,5),rep(5,5)),
                  thing = c(rep(c('a','b','c','d','e'),5)),
                  score = c(1,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0))

它报告一堆“组”的每个“事物”的“分数”。

我想创建一个相关矩阵,该矩阵基于所有“事物”在各个组中得分的相关性来显示成对得分相关性:

         thing_a thing_b thing_c thing_d thing_e
thing_a  1       .       .       .       .
thing_b  corr    1       .       .       .
thing_c  corr    corr    1       .       .
thing_d  corr    corr    corr    1       .
thing_e  corr    corr    corr    corr    1

例如,事物“ a”和事物“ b”之间的相关关系的基础数据将是:

group  thing_a_score  thing_b_score
1      1              1
2      1              1
3      1              1
4      0              1
5      0              1

实际上,唯一组的数量是〜1,000,事物的数量是〜10,000,所以我需要一种比暴力循环更有效的方法。

我不需要相关性的结果矩阵在单个矩阵中,甚至不需要在一个矩阵本身中(即,它可能是一堆具有三列“ thing_1 thing_2 corr”的数据集)。

r combinations permutation correlation pairwise
1个回答
0
投票

您可以先dcast您的数据,然后使用cor()函数获得相关矩阵:

library(data.table)
dt <- data.table(
  group = c(rep(1,5),rep(2,5),rep(3,5),rep(4,5),rep(5,5)),
  thing = c(rep(c('a','b','c','d','e'),5)),
  score = c(1,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0)
)
dt

m <- dcast(dt, group ~ thing, value.var = "score")

cor(m[, -1])
© www.soinside.com 2019 - 2024. All rights reserved.