Ich habe einen einfachen Datenrahmen als solcher:
%Vor%Und ich würde es gerne neu formatieren:
%Vor% (Bitte beachten Sie: der reale Datensatz hat Tausende von Zeilen und die Werte stammen aus biologischen Daten - die NA
s folgen keinem einfachen Muster, außer dass die NA
s disjunkt sind, und ja, es gibt genau 3 Zeilen für jedes ID
).
SCHRITT EINS : Löschen Sie Zeilen, die nur NA
-Werte enthalten.
Auf der Oberfläche sah das einfach aus, aber ich habe einige Probleme überstanden.
complete.cases(DF)
gibt alle FALSE
zurück, also kann ich nicht wirklich die Zeilen mit allen NA
s entfernen, wie in DF[complete.cases(DF),]
. Dies liegt daran, dass alle Zeilen mindestens ein NA
enthalten.
Da NA
s sich selbst verbreiten möchten, schlagen andere Schemas, die is.na
verwenden, aus dem gleichen Grund fehl.
SCHRITT ZWEI : Die verbleibenden zwei Zeilen werden zu einem zusammengefügt.
Ich denke daran, etwas wie aggregate
zu benutzen, um das durchzuziehen, aber es muss einen einfacheren Weg geben als dies , was überhaupt nicht funktioniert.
Danke für irgendeinen Rat.
Hier ist ein Datentabellenansatz, der na.omit()
in den Spalten nach ID gruppiert verwendet.
Hier ein paar zusammengefasste Versuche:
%Vor% Da die Formeloberfläche von aggregate
standardmäßig na.omit
für die gesamten Daten vor jeder Gruppierung verwendet, löscht sie jede Zeile von dat
, da sie alle mindestens einen NA
-Wert enthalten. Probieren Sie es aus: nrow(na.omit(dat))
gibt 0
zurück. Verwenden Sie in diesem Fall na.pass
in aggregate
und dann na.omit
, um die übergebenen NA
s zu überspringen.
Alternativ können Sie die Formelschnittstelle nicht verwenden und die Spalten für die manuelle Aggregation angeben:
%Vor%