Die Vorstufe der Datenverarbeitung besteht aus dem Lesen der Daten. Wenn Sie die Daten lesen, die Sie haben, haben Sie häufig leere Spalten oder Spalten, die nicht dieselbe Länge haben, und Sie möchten unnötige Spalten löschen. Angenommen, Sie lesen die folgende Tabelle.
a | b | c | d |
---|---|---|---|
1 | 2 | 3 | NA |
2 | 3 | 4 | NA |
3 | 4 | NA | NA |
df <- data.frame(a = c(1,2,3),
b = c(2,3,4),
c = c(3,4,NA),
d = c(NA,NA,NA))
> df
a b c d
1 1 2 3 NA
2 2 3 4 NA
3 3 4 NA NA
library(dplyr)
Wenden Sie "anyNA ()" an, um zu überprüfen, ob NA für jede Spalte enthalten ist, und invertieren Sie den Rückgabewert als logischen Vektor.
df %>% lapply(.,anyNA) %>% unlist %>% !.
a b c d
TRUE TRUE FALSE FALSE
Übergeben Sie dies an die Funktion select_if ()
, die die Spalten auswählt, die die Bedingungen erfüllen.
df %>% select_if(lapply(.,anyNA) %>% unlist %>% !.)
a b
1 1 2
2 2 3
3 3 4
Ich habe es geschafft, unnötige Spalten mit einem einzeiligen Skript loszuwerden. Ich denke, die Lesbarkeit ist dank der Pipe nicht so schlecht.
Der Kommentar von @hkzm war hilfreich.
Die Verwendung von purrr :: negat ()
, das die Negation der angegebenen Funktion übergibt, machte das Schreiben einfacher und einfacher.
library(tidyverse)
df %>% select_if(negate(anyNA))
a b
1 1 2
2 2 3
3 3 4
Dies entspricht dem Invertieren mit dem Operator !
Und dem Erstellen einer Formel mit ~
.
df %>% select_if(~ !anyNA(.))
a b
1 1 2
2 2 3
3 3 4
Ich persönlich dachte, dass derjenige mit besserer Lesbarkeit derjenige sein würde, der purrr :: negat ()
verwendet.
Für Python-Pandas gibt es eine Methode dropna ()
, die fehlende Werte entfernt, die sowohl in Zeilen- als auch in Spaltenrichtung anwendbar ist.
Referenz: Ausschließen (löschen) / ersetzen (ausfüllen) / fehlenden Wert NaN durch Pandas extrahieren
dropna(how='any', axis=1)
dropna(how='all', axis=1)
In R ist die einzige Funktion, die fehlende Werte löscht, die Zeilenrichtung.
--Löschen Sie Zeilen, die mindestens eine NA enthalten
na.omit()
Ich habe eine Google-Suche durchgeführt und nach einer Möglichkeit gesucht, in Spaltenrichtung zu löschen, konnte sie jedoch nicht leicht finden. Ich habe diesen Artikel endlich gefunden.
Mittel zum Entfernen von Spalten, die NA in R enthalten
Abhängig von der Programmiersprache können Sie Stärken und Schwächen haben. Warum gibt es in R keine ähnliche Funktion?
Recommended Posts