在R中为计算的叉积矩阵添加标签

时间:2018-03-21 18:39:26

标签: r matrix cross-product

我有一个我创建的表格如下

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

我不知道如何将myTab []的标题链接到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)并获取值。目前我只能设法查询行/列,如下所示(但我无法设法查询111例如)

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

2-查看每个号码的相应标题,如

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

对诸如

之类的值进行排序
          111       116       112       114       113  115
111 1.0000000 0.5773503 0.4082483 0.3333333 0.0000000  0.0

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

1 个答案:

答案 0 :(得分:2)

我们可以使用dimnames来分配rownames和columnames。在这种情况下,只有colnames的myTab&#39;需要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

现在,基于rownames,它可以是子集

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