Dies ist ein Beispiel meiner Daten aus CSV. Es enthält ~ 10 Spalten.
%Vor%Ich möchte NAs in Zeile 4 und 5 mit 10 bzw. 11 füllen (da das Produktgewicht von A und C bereits aus Zeile 1 und 3 bekannt ist). Ich möchte, dass der endgültige Datenrahmen so ist
%Vor%Was ist der beste Weg, dies in R zu tun?
Obwohl die Frage nach dem "vorherigen Ereignis" den Nachteil hätte, dass, wenn das erste Product_Weight
in irgendeinem Product_id
NA
wäre, es nicht ausgefüllt werden könnte, selbst wenn wir das Product_Weight
von kennen würden ein nachfolgendes Product_id
, also verwenden wir anstelle des vorherigen Vorkommens den Mittelwert aller Nicht-NAs mit demselben Product_id
. Da diese alle gleich sein sollten, ist ihr Mittelwert ihr gemeinsamer Wert.
Wenn Sie das vorherige Vorkommen wirklich wollen, benutzen Sie die Prev
Funktion wo:
anstelle von na.aggregate
in (1) und (3) und nicht (2).
Die folgenden Lösungen haben die Vorteile, dass sie alle:
bewahrt die Reihenfolge der Eingabe
funktioniert auch dann, wenn das erste Product_Weight
in einem Product_id
NA ist
ändert die Eingabe nicht
Die erste Lösung hat den zusätzlichen Vorteil, dass sie nur eine Codezeile (plus eine library
-Anweisung) enthält und die zweite Lösung den zusätzlichen Vorteil hat, keine Pakete zu verwenden.
1) zoo :: na.aggregate Wir verwenden na.aggregate
im Zoo-Paket (das alle NAs durch den Durchschnitt der Nicht-NAs ersetzt) und wir wenden es separat auf Product_Weight
an für jedes Product_id
.
geben:
%Vor% 2) Keine Pakete Alternativ Mean
anstelle von na.aggregate
verwenden, wobei Mean
wie folgt definiert ist:
3) dplyr / zoo Fügen Sie Zeilennummern hinzu, gruppieren Sie nach Product_id
, füllen Sie die NAs wie in den vorherigen Lösungen mit na.aggregate
wie unten gezeigt oder Mean
, ordnen Sie sie zurück in die ursprüngliche Reihenfolge und entfernen Sie die Zeilennummern:
Hinweis: Dies wurde für die Eingabe DF
: