2016-08-20 192 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 

我想用這個鍵上的另一個數據幀/矩陣,用ID(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 50萬長,它崩潰。 – user2543095

+0

500k行或列? –