Добавьте метки в рассчитанную матрицу перекрестного произведения в R

У меня есть таблица, которую я создал следующим образом

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

Любые идеи о том, как достичь любого из вышеперечисленного?


person Selrac    schedule 21.03.2018    source источник


Ответы (1)


Мы можем использовать 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
person akrun    schedule 21.03.2018