Ich habe einen Vektor, der mir für jede Zeile in einem Datumsrahmen den Spaltenindex angibt, für den der Wert in dieser Zeile aktualisiert werden soll.Wählen Sie eine Zelle pro Zeile im Datenrahmen
> set.seed(12008); n <- 10000; d <- data.frame(c1=1:n, c2=2*(1:n), c3=3*(1:n))
> i <- sample.int(3, n, replace=TRUE)
> head(d); head(i)
c1 c2 c3
1 1 2 3
2 2 4 6
3 3 6 9
4 4 8 12
5 5 10 15
6 6 12 18
[1] 3 2 2 3 2 1
Dies bedeutet, dass für die Zeilen 1 und 4, C 3 aktualisiert werden soll; Für die Zeilen 2, 3 und 5 sollte c2 (unter anderem) aktualisiert werden. Was ist der sauberste Weg, dies in R mit vektorisierten Operationen zu erreichen, d. H. Ohne apply
und Freunde? EDIT: Und, wenn überhaupt möglich, ohne R-Schleifen?
Ich habe darüber nachgedacht, d
in eine Matrix umzuwandeln und dann die Matrixelemente adressieren einen eindimensionalen Vektor verwendet wird. Aber dann habe ich keine saubere Methode gefunden, die eindimensionale Adresse aus den Zeilen- und Spaltenindizes zu berechnen.
Wurde das in den Zweig 2.15.1 portiert? R-devel würde normalerweise die nächste Nebenversion bedeuten, d.h. 2.16.x. –
@GavinSimpson - Netter Fang. Vielen Dank. Wenn ich es noch einmal anschaue, sehe ich jetzt den Hinweis, dass der "r59537 Entwicklungs-Schnappschuss von R [...] irgendwann R-2.16.0 werden wird". Wird meinen Beitrag entsprechend bearbeiten. –
Wird es auch analoge Unterstützung für Matrizen/Arrays geben? – krlmlr