2016-08-20 4 views
-1

lassen Sie uns sagen, dass ich einen kleineren Korrelationsmatrix („Schlüssel“):eine Matrix aus einem kleineren „Schlüssel“ Matrix zu schaffen

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

ich diesen Schlüssel auf einem anderen Datenrahmen/Matrix verwenden möchten, mit IDs (a, b, c), um eine größere Matrix zu erstellen.

Zum Beispiel dieses Beispiel Datenrahmen:

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

in diese größere Korrelationsmatrix drehen würde den oben „Schlüssel“ mit:

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 

was ist ein Weg, dies zu tun, und was ist ein Möglichkeit, dies rechnerisch effizient zu tun, angesichts eines viel größeren Datenrahmens?

Antwort

7

R subsetting von Namen erlaubt:

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 

Daten

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

dies funktioniert, danke! – user2543095

+0

aber gibt es eine Möglichkeit, dies mit einem größeren DF1 zu tun? Mein df ist 500.000 lang und es stürzt ab. – user2543095

+0

500k Zeilen oder Spalten? –

Verwandte Themen