将标签添加到 R 中计算的叉积矩阵

Add labels to calculated cross product matrix in R

我有一个table,我创建如下

A_ID<-c(111,116,111,112,112,114,116,113,114,111,114,116,115,116,116)
U_ID<-c(221,221,222,222,223,223,223,224,224,225,225,225,226,226,226)

df_u_a<-data.frame(U_ID,A_ID)

myTab <- table(df_u_a) # count
myTab[] <- as.integer(as.logical(myTab)) # binary map

我创建的后续叉积矩阵如下

CProd.Matrix <- crossprod(myTab[] %*% diag(1 / sqrt(colSums(myTab[]^2))))

这产生了以下输出

> myTab[]
     A_ID
U_ID  111 112 113 114 115 116
  221   1   0   0   0   0   1
  222   1   1   0   0   0   0
  223   0   1   0   1   0   1
  224   0   0   1   1   0   0
  225   1   0   0   1   0   1
  226   0   0   0   0   1   1
> CProd.Matrix
          [,1]      [,2]      [,3]      [,4] [,5]      [,6]
[1,] 1.0000000 0.4082483 0.0000000 0.3333333  0.0 0.5773503
[2,] 0.4082483 1.0000000 0.0000000 0.4082483  0.0 0.3535534
[3,] 0.0000000 0.0000000 1.0000000 0.5773503  0.0 0.0000000
[4,] 0.3333333 0.4082483 0.5773503 1.0000000  0.0 0.5773503
[5,] 0.0000000 0.0000000 0.0000000 0.0000000  1.0 0.5000000
[6,] 0.5773503 0.3535534 0.0000000 0.5773503  0.5 1.0000000

我不知道如何 link myTab[] 的 headers 到 CProd.Matrix。例如:

          111       112       113       114  115       116
111 1.0000000 0.4082483 0.0000000 0.3333333  0.0 0.5773503
112 0.4082483 1.0000000 0.0000000 0.4082483  0.0 0.3535534
113 0.0000000 0.0000000 1.0000000 0.5773503  0.0 0.0000000
114 0.3333333 0.4082483 0.5773503 1.0000000  0.0 0.5773503
115 0.0000000 0.0000000 0.0000000 0.0000000  1.0 0.5000000
116 0.5773503 0.3535534 0.0000000 0.5773503  0.5 1.0000000

我想达到的是

1- 能够查询特定数字(如 111)并获取值。目前我只能设法查询 row/column,如下所示(但我无法设法查询 111,例如)

> CProd.Matrix [1,]
[1] 1.0000000 0.4082483 0.0000000 0.3333333 0.0000000 0.5773503

2- 查看每个数字对应的 headers,例如

          111       112       113       114  115       116
111 1.0000000 0.4082483 0.0000000 0.3333333  0.0 0.5773503

3- 对值进行排序,如

          111       116       112       114       113  115
111 1.0000000 0.5773503 0.4082483 0.3333333 0.0000000  0.0

关于如何实现上述任何一个的任何想法?

我们可以使用dimnames 来分配行名和列名。在这种情况下,只需要 colnames 个 'myTab',因为 dimnames

dimnames(CProd.Matrix) <-rep(list(colnames(myTab)), 2)
CProd.Matrix
#          111       112       113       114 115       116
#111 1.0000000 0.4082483 0.0000000 0.3333333 0.0 0.5773503
#112 0.4082483 1.0000000 0.0000000 0.4082483 0.0 0.3535534
#113 0.0000000 0.0000000 1.0000000 0.5773503 0.0 0.0000000
#114 0.3333333 0.4082483 0.5773503 1.0000000 0.0 0.5773503
#115 0.0000000 0.0000000 0.0000000 0.0000000 1.0 0.5000000
#116 0.5773503 0.3535534 0.0000000 0.5773503 0.5 1.0000000

现在,可以根据行名对其进行子集化

CProd.Matrix ["111",, drop = FALSE]
#    111       112 113       114 115       116
#111   1 0.4082483   0 0.3333333   0 0.5773503

子集化后的值排序 ?

t(apply(CProd.Matrix ["111",, drop = FALSE], 1, sort, decreasing = TRUE))
#    111       116       112       114 113 115
#111   1 0.5773503 0.4082483 0.3333333   0   0