Filter mehrere Werte für eine string-Spalte in dplyr
Ich habe eine data.frame
mit Charakter Daten in einer der Spalten.
Ich würde gerne mehrere filter-Optionen in der data.frame
aus der gleichen Spalte. Gibt es einen einfachen Weg, dies zu tun, dass ich bin fehlt?
Beispiel:
data.frame
name = dat
days name
88 Lynn
11 Tom
2 Chris
5 Lisa
22 Kyla
1 Tom
222 Lynn
2 Lynn
Möchte ich herausfiltern Tom
und Lynn
zum Beispiel.
Wenn ich das mache:
target <- c("Tom", "Lynn")
filt <- filter(dat, name == target)
Bekomme ich diesen Fehler:
longer object length is not a multiple of shorter object length
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
%in%
statt==
:Produziert
Zu verstehen, warum, Bedenken Sie, was geschieht hier:
Grundsätzlich sind wir recycling-die beiden Länge
target
vector vier mal mit der Länge vondat$name
. In anderen Worten, wir sind dabei:In diesem Fall werden wir nicht bekommen eine Fehlermeldung, da ich vermute, dass Ihre Daten-frame hat tatsächlich eine unterschiedliche Anzahl von Zeilen, die nicht zulassen, recycling, aber das Beispiel, das Sie bieten, unterstützt (8 Zeilen). Wenn die Probe hatte eine ungerade Anzahl von Zeilen hätte ich bekommen den gleichen Fehler wie Sie. Aber auch bei recycling-arbeiten, dies ist eindeutig nicht das, was Sie wollen. Grundsätzlich ist die Aussage
dat$name == target
ist äquivalent zu sagen:So kommt es, dass der Letzte Wert in der Beispiel-Daten-frame ist auch gleich "Lynn", daher der eine
TRUE
oben.Kontrast,
dat$name %in% target
sagt:Sehr unterschiedlich. Hier ist das Ergebnis:
Hinweis: dein problem hat nichts zu tun mit
dplyr
nur die mis-Nutzung==
.Mithilfe der
base
Paket:Ausgabe:
Mit
sqldf
:Dies kann erreicht werden durch dplyr-package, welches im CRAN. Der einfache Weg, dies zu erreichen:
Installieren
dplyr
Paket.library(dplyr) df<- select(filter(dat,name=='tom'| name=='Lynn',c('days','name))
Erklärung:
So, haben wir einmal heruntergeladen dplyr, wir erstellen eine neue Daten-Frames durch die Verwendung von zwei verschiedenen Funktionen aus diesem Paket:
filter: das erste argument ist der data frame; das zweite argument ist der Zustand, von dem wir wollen, dass es subsetted. Das Ergebnis ist der gesamte Daten-frame mit nur die Zeilen, die wir wollten.
wählen Sie: das erste argument ist der data frame; das zweite argument gibt die Namen der Spalten, wir wollen, ausgewählt aus es. Wir haben nicht zu verwenden, die Namen () - Funktion, und wir haben nicht einmal die Anführungszeichen verwenden. Wir einfach die Liste mit den Namen der Spalten als Objekte.