Ich habe eine Matrix L der Größe n x k
und einen Vektor Z der Größe p
. Z besteht aus ganzen Zahlen, die die Spaltenindizes von L darstellen. Ich möchte eine Matrix X der Größe erstellen, n x p
die die Aggregation der entsprechenden Spalten von L darstellt, die basierend auf den Werten in Z ausgewählt wurden.
Z = c(1, 3, 1, 2)
L = matrix(c(73,50,4,14,87,5,34,51,17,57,47,65),nrow=4)
> L
[,1] [,2] [,3]
[1,] 73 87 17
[2,] 50 5 57
[3,] 4 34 47
[4,] 14 51 65
Ich möchte, dass X ist
> X
[,1] [,2] [,3] [,4]
[1,] 73 17 73 87
[2,] 50 57 50 5
[3,] 4 47 4 34
[4,] 14 65 14 51
In meinen Originaldaten p
sind k
und n
ziemlich groß (30K, 500 bzw. 2K), und eine Schleife über alle Z-Werte zum Auswählen und Kombinieren der Spalten aus L dauert sehr lange. Kann es einen vektorisierten Weg (keine Schleifen) geben, um diese Aufgabe zu erledigen?
Ziemlich sicher, dass dies nur ist:
L[,Z]
# [,1] [,2] [,3] [,4]
#[1,] 73 17 73 87
#[2,] 50 57 50 5
#[3,] 4 47 4 34
#[4,] 14 65 14 51
R ist es egal, ob Sie wiederholte Spaltenindizes haben, wenn Sie aus den meisten Objekten auswählen.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen