计算多个变量的对组合

时间:2016-06-07 21:08:15

标签: r cross-product

我有一个数据集,其中每列有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和Sarah的A和B为1。

1 个答案:

答案 0 :(得分:1)

对于两个向量AB,它将是一个交叉产品:

res <- A %*% B 要么 res <- 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)]