Ich habe einen sehr großen Datenrahmen ( df ) mit ungefähr 35-45 Spalten (Variablen) und Zeilen größer als 300. Einige der Zeilen enthalten NA, NaN, Inf, -Inf Werte in einzelnen oder mehrere Variablen und ich habe benutzt
na.omit(df)
, um Zeilen mit NA und NaN zu entfernen, aber ich kann Zeilen mit Inf- und -Inf-Werten nicht mit der Funktion na.omit entfernen.
Bei der Suche stieß ich auf diesen Thread Entfernen Sie Zeilen mit Inf und NaN in R und verwendete den modifizierten Code df[is.finite(df)]
, aber es löschte nicht die Zeilen mit Inf und -Inf und gibt auch diesen Fehler
Fehler in is.finite (df): Standardmethode für Typ nicht implementiert 'Liste'
BEARBEITET
Entfernen Sie die gesamte Zeile, auch wenn die entsprechende eine oder mehrere Spalten inf und -inf haben
is.finite
funktioniert bei vector
und nicht bei data.frame
-Objekt. Also können wir die data.frame
mit lapply
durchlaufen und nur die "endlichen" Werte erhalten.
Wenn die Anzahl der Inf
, -Inf
-Werte für jede Spalte unterschiedlich ist, hat der obige Code list
mit Elementen ungleich length
. Es kann also besser sein, es als list
zu belassen. Wenn wir ein data.frame
haben wollen, sollte es gleich lang sein.
Wenn wir Zeilen entfernen möchten, enthalten sie alle NA- oder Inf / -Inf-Werte
%Vor%Oder eine kompakte Option von @nicola
%Vor% Wenn wir bereit sind, ein Paket zu verwenden, wäre eine kompakte Option NaRV.omit
Um die Zeilen ohne Inf
zu behalten, können wir tun:
Auch NA
s werden dadurch behandelt wegen:
Ein Zeilenindex mit dem Wert NA
entfernt diese Zeile im Ergebnis.
Auch Zeilen mit NaN
sind nicht im Ergebnis.
Hier sind die Ergebnisse der verschiedenen is.~
-Funktionen: