Как обеспечить, чтобы имена строк и столбцов были в одном и том же порядке для анализа QAP - PullRequest
0 голосов
/ 22 марта 2019

Я работаю с матрицами смежности сети в R для регрессии QAP. В настоящее время матрицы выглядят следующим образом (игнорируются 0 и 1): enter image description here

Как сделать так, чтобы метки столбцов / строк отображались в одном и том же порядке между временем 1 и 2? Я отсортировал начальные списки ребер (q1 и q2 в приведенном ниже коде), но что-то теряется при переводе при преобразовании их в матрицы смежности одного режима.

q1_2001<-graph.data.frame(q1, directed=FALSE)
q2_2002<-graph.data.frame(q2, directed=FALSE)
V(q1_2001)$type <- bipartite_mapping(q1_2001)$type
V(q2_2002)$type <- bipartite_mapping(q2_2002)$type
q1bp_2001<-bipartite.projection(q1_2001)
q2bp_2002<-bipartite.projection(q2_2002)
q1edge2001<-as_edgelist(q1bp_2001$proj1)
q1edge2002<-as_edgelist(q2bp_2002$proj1)
##Predictor Matrix (IV)
qap2001A<-get.adjacency(graph.data.frame(q1edge2001),sparse = FALSE)
qap2001A[order(decreasing = TRUE)]
##Response Matrix (DV)
qap2002B<-get.adjacency(graph.data.frame(q1edge2002),sparse = FALSE)

1 Ответ

0 голосов
/ 22 марта 2019

Предполагая, что 2 матрицы имеют размеры, а имена столбцов и имена строк совпадают (хотя они могут отображаться в разном порядке), вы можете получить желаемый результат с помощью следующего:

Time2 = Time2[rownames(Time1), colnames(Time1)]

Например

set.seed(1)
Time1 = replicate(5, sample(0:1, 5, replace = T)) 
Time2 = replicate(5, sample(0:1, 5, replace = T)) 

colnames(Time1) = rownames(Time1) = c("22B", "13B", "999B", "11B", "03B")
colnames(Time2) = rownames(Time2) = c("22B", "999B", "11B", "13B", "03B")

> Time1
     23B 13B 999B 11B 03B
23B    0   1    0   0   1
13B    0   1    0   1   0
999B   1   1    1   1   1
11B    1   1    0   0   0
03B    0   0    1   1   0

> Time2
     22B 999B 11B 13B 03B
22B    0    0   1   1   1
999B   0    1   1   1   0
11B    0    0   0   1   0
13B    1    0   1   1   1
03B    0    1   0   1   1

# Notice that Time1 and Time2 are similar to your example but with different entries. The column names and row names are the same but in different order

Time2 = Time2[rownames(Time1), colnames(Time1)]

> Time2
     22B 13B 999B 11B 03B
22B    0   1    0   1   1
13B    1   1    0   1   1
999B   0   1    1   1   0
11B    0   1    0   0   0
03B    0   1    1   0   1
...