我有一个ID大的数据集,还有一些二进制变量。我想创建一个计算交叉点的相关矩阵,即如果var1和var2的ID分别为20和1,则var1,var2为20(与var2,var1相同),对角线就是sum(col)
例如:
ID <- c(100,101,102,104)
var1 <- c(1,1,1,1)
var2 <- c(1,0,0,1)
var3 <- c(1,1,0,0)
var4 <- c(0,0,0,1)
我希望输出为:
vars var1 var2 var3 var4
var1 4 2 2 1
var2 2 2 1 1
var3 2 0 2 0
var4 1 1 0 1
答案 0 :(得分:2)
从m
列中形成一个矩阵var
,并将其转置值自身相乘,即t(m) %*% m
或使用crossprod
,如下所示:
m <- cbind(var1, var2,var3, var4)
crossprod(m)
给予:
var1 var2 var3 var4
var1 4 2 2 1
var2 2 2 1 1
var3 2 1 2 0
var4 1 1 0 1