2017-12-27 6 views
0

Ich habe eine data.frame, bestehend aus zwei Spalten, die row.names und colnames einer numerischen Matrix entsprechen. Zum Beispiel:Referenzieren Matrixelemente für eine Liste von row.names und colnames

myDF <- data.frame(curr1 = sample(row.names(euro.cross), 5), 
        curr2 = sample(colnames(euro.cross), 5)) 

Ich versuche, einen Vektor zurück, die gleiche Länge wie nrow(myDF), die die Elemente von euro.cross entsprechenden mit den Werten in myDF$curr1 und myDF$curr2 enthält. Dies ist für ein Element trivial. Zum Beispiel entspricht die erste Zeile in myDF dem Wert euro.cross[myDF$curr1[1], myDF$curr2[1]]. Wenn ich jedoch Vektoren an die eckigen Klammern übergebe, wird eine Matrix zurückgegeben (d. H. euro.cross[myDF$curr1, myDF$curr2] gibt eine Matrix anstelle eines Vektors von length(myDF$curr1) zurück).

Wie vektorisiert ich diesen Vorgang so, dass ich so etwas wie zu tun:

myDF$rate <- euro.cross[myDF$curr1, myDF$curr2] 

Offensichtlich konnte ich eine Schleife durchführen, aber ich bin auf der Suche für einen eleganteren Weg, es zu codieren. Hatte keinen Erfolg mit anwenden Funktionen bisher.

Danke!

Antwort

2

Sie können myDF in eine Matrix konvertieren, und es direkt Elemente extrahieren aus euro.cross, dieIndizierung über eine Zeichenmatrix löst (mehr Details siehe ?'['Matrices und Arrays Abschnitt) und das tut, was Sie brauchen :

euro.cross[as.matrix(myDF)] 
# [1] 1.204921087 18.305448539 0.003070713 0.010992059 0.057234508 
Verwandte Themen