将标签添加到R中计算的叉积矩阵
我创建了一个表,如下所示将标签添加到R中计算的叉积矩阵,r,matrix,cross-product,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
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[]的标题链接到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)
2-请参阅每个数字对应的标题,如
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
来分配行名和列名。在这种情况下,只需要'myTab'的colnames
,因为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
对子集后的值进行排序
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
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