R 将共现数据帧转换为平方矩阵

R 将共现数据帧转换为平方矩阵,r,R,假设我有这个数据帧: d <- structure(list(A = c(1L, 1L, 1L, 0L, 1L, 1L, 1L), B = c(1L, 1L, 1L, 1L, 1L, 1L, 1L), C = c(0L, 0L, 1L, 0L, 0L, 0L, 0L), D = c(0L, 0L, 0L, 0L, 0L, 0L, 0L), E = c(0L, 0L, 0L, 0L, 0L, 0L, 0L), F = c(0L, 0L, 0L, 0L, 0L, 0L, 0L),

假设我有这个数据帧:

    d <- structure(list(A = c(1L, 1L, 1L, 0L, 1L, 1L, 1L), B = c(1L, 1L, 
1L, 1L, 1L, 1L, 1L), C = c(0L, 0L, 1L, 0L, 0L, 0L, 0L), D = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L), E = c(0L, 0L, 0L, 0L, 0L, 0L, 0L), F = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L), G = c(0L, 0L, 0L, 0L, 0L, 0L, 0L), H = c(0L, 
1L, 0L, 0L, 1L, 1L, 0L)), row.names = c(NA, -7L), class = c("tbl_df", 
"tbl", "data.frame"))



      A     B     C     D     E     F     G     H
  <int> <int> <int> <int> <int> <int> <int> <int>
1     1     1     0     0     0     0     0     0
2     1     1     0     0     0     0     0     1
3     1     1     1     0     0     0     0     0
4     0     1     0     0     0     0     0     0
5     1     1     0     0     0     0     0     1
6     1     1     0     0     0     0     0     1
7     1     1     0     0     0     0     0     0

但是当做非常大的矩阵时,这是很慢的。有没有更快的方法?

您用文字描述的内容听起来像是普通的矩阵乘法,通过将diag设置为0是不允许的:

temp <- t(as.matrix(d)) %*% as.matrix(d)
diag(temp) <- 0


> temp
  A B C D E F G H
A 0 6 1 0 0 0 0 3
B 6 0 1 0 0 0 0 3
C 0 1 0 0 0 0 0 0
D 0 0 0 0 0 0 0 0
E 0 0 0 0 0 0 0 0
F 0 0 0 0 0 0 0 0
G 0 0 0 0 0 0 0 0
H 3 3 0 0 0 0 0 0

temp
m您是指
crossprod
功能吗?
  A B C D E F G H
A 0 6 1 0 0 0 0 3
B 6 0 1 0 0 0 0 3
C 1 1 0 0 0 0 0 0
D 0 0 0 0 0 0 0 0
E 0 0 0 0 0 0 0 0
F 0 0 0 0 0 0 0 0
G 0 0 0 0 0 0 0 0
H 3 3 0 0 0 0 0 0
temp <- t(as.matrix(d)) %*% as.matrix(d)
diag(temp) <- 0


> temp
  A B C D E F G H
A 0 6 1 0 0 0 0 3
B 6 0 1 0 0 0 0 3
C 0 1 0 0 0 0 0 0
D 0 0 0 0 0 0 0 0
E 0 0 0 0 0 0 0 0
F 0 0 0 0 0 0 0 0
G 0 0 0 0 0 0 0 0
H 3 3 0 0 0 0 0 0