Angenommen, ich habe einen Datenrahmen wie folgt:
%Vor%Also wird VALUE nur einmal pro ID auf FIRST = TRUE gesetzt. ID_2 kann zwischen IDs duplizieren, muss aber nicht.
Wie gebe ich die Zahlen aus den ersten Zeilen jeder ID in alle Zeilen dieser ID ein, so dass die Spalte VALUE zu 2, 2, 2, 5, 5 wird?
Ich weiß, ich könnte einfach alle IDs mit einer for-Schleife durchlaufen, aber ich suche nach einem effizienteren Weg.
Die Frage fragt nach Effizienz im Vergleich zu einer Schleife. Hier ist ein Vergleich von vier Lösungen:
zoo::na.locf
, wodurch eine Paketabhängigkeit eingeführt wird, und obwohl es viele Kantenfälle behandelt, müssen die 'leeren' Werte NA sein. Die anderen Lösungen lassen sich leicht an Nicht-NA-Rohlinge anpassen.
Eine einfache Schleife in der Basis R.
Eine rekursive Funktion in der Basis R.
Meine eigene vektorisierte Lösung in Base R.
Die neue Funktion fill()
in tidyr
version 0.3.0., die auf data.frames funktioniert.
Beachten Sie, dass die meisten dieser Lösungen für Vektoren und nicht für Datenrahmen gedacht sind, sodass sie keine ID-Spalte überprüfen. Wenn der Datenrahmen nicht nach ID gruppiert ist und der zu füllende Wert an der Spitze jeder Gruppe liegt, können Sie eine Fensterfunktion in dplyr
oder data.table
Ergebnisse:
%Vor%