2016-06-07 92 views
0

我有一个数据集,其中每列有4个二进制变量。我如何创建4 x 4网格与变量的每对组合的计数?多个变量对组合的计数

下面是一个例子的数据帧:

Person <- c("Bob", "Jim", "Sarah", "Dave") 
A <- c(1,0,1,1) 
B <- c(1,1,1,0) 
C <- c(0,0,0,1) 
D <- c(1,0,0,0) 
在4x4网格

因此,A和B的交点将具有2因为Bob和萨拉有1个为A和B.

回答

1

对于双矢量AB这将是一个叉积:

res <- A %*% Bres <- crossprod(A, B)

让所有组合的矩阵使用两个级别forapply

data <- list(A,B,C,D) 
res <- matrix(NA, nrow = n, ncol = m, dimnames = dimnames(product.m)) 

for(i in 1:n) { 
    for(j in 1:i) { 
    res[i,j] <- crossprod(data[[i]], data[[j]]) 
    } 
} 

这里我只填写了矩阵的一半。然后,您可以像这样复制值:

res[upper.tri(res)] <- t(res)[upper.tri(res)] 
+0

我需要它为每对组合,而不是特定的一个 – user1923975