2016-08-20 2 views
-1

давайте говорить, что у меня есть меньше, корреляционная матрица («под ключом»):создание матрицы из меньшей матрицы «ключа»

a b  c 
a 1.0 0.0 0.2 
b 0.0 1.0 0.1 
c 0.2 0.1 1.0 

Я хочу использовать этот ключ на другой кадр данных/матрице, с идентификаторами (a, b, c), чтобы сделать большую матрицу.

Например, этот пример данных кадра:

sex age id 
F 20 a 
F 22 b 
M 23 b 
M 18 a 
F 12 c 

превратится в этой большой корреляционной матрицы, используя вышеупомянутую «ключ»:

a b b a c 
a 1.0 0.0 0.0 1.0 0.2 
b 0.0 1.0 1.0 0.0 0.1 
b 0.0 1.0 1.0 0.0 0.1 
a 1.0 0.0 0.0 1.0 0.2 
c 0.2 0.1 0.1 0.2 1.0 

, что это способ сделать это, и что это способ сделать это вычислительно эффективным, учитывая гораздо больший объем данных?

ответ

7

R позволяет Подменю названиями:

mat_cor[df1$id,df1$id] 
    a b b a c 
a 1.0 0.0 0.0 1.0 0.2 
b 0.0 1.0 1.0 0.0 0.1 
b 0.0 1.0 1.0 0.0 0.1 
a 1.0 0.0 0.0 1.0 0.2 
c 0.2 0.1 0.1 0.2 1.0 

данных

df1 <- structure(list(sex = structure(c(1L, 1L, 2L, 2L, 1L), .Label = c("F", 
                   "M"), class = "factor"), age = c(20L, 22L, 23L, 18L, 12L), id = structure(c(1L, 
                                      2L, 2L, 1L, 3L), .Label = c("a", "b", "c"), class = "factor")), .Names = c("sex", 
                                                         "age", "id"), class = "data.frame", row.names = c(NA, -5L)) 
mat_cor <- structure(c(1, 0, 0.2, 0, 1, 0.1, 0.2, 0.1, 1), .Dim = c(3L, 
                 3L), .Dimnames = list(c("a", "b", "c"), c("a", "b", "c"))) 
+0

это работает, спасибо! – user2543095

+0

, но есть ли способ сделать это с большим df1? Мой df длится 500 000, и он падает. – user2543095

+0

500k строк или столбцов? –

Смежные вопросы