>我有一个我创建的表,如下所示
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
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