Ich muss einen Datenrahmen anhand der Zeile filtern, in der die Zeichenfolge enthalten ist RTB
.
Ich benutze dplyr
.
d.del <- df %.%
group_by(TrackingPixel) %.%
summarise(MonthDelivery = as.integer(sum(Revenue))) %.%
arrange(desc(MonthDelivery))
Ich weiß, dass ich die Funktion filter
in verwenden kann, dplyr
aber ich weiß nicht genau, wie ich sie anweisen soll, nach dem Inhalt einer Zeichenfolge zu suchen.
Insbesondere möchte ich den Inhalt in der Spalte überprüfen TrackingPixel
. Wenn die Zeichenfolge die Bezeichnung enthält, RTB
möchte ich die Zeile aus dem Ergebnis entfernen.
dplyr
, aber wenn?dplyr::filter
ich mir die Hilfe in anschaue, würde ich so etwas wiefilter(df, !grepl("RTB",TrackingPixel))
vielleicht vorschlagen ?RTB
und die anderen nicht anzuzeigen.!
vorgrepl
- wieder umgekehrt wird .invert
undvalue
Argumente vongrep
. Reguläre Ausdrücke erleichtern die Arbeit mit Text tausendmal.grepl
funktioniert bei mir nicht mit Postgres, ist das für MySQL?Antworten:
Die Antwort auf die Frage wurde bereits von der @latemail in den obigen Kommentaren gepostet. Sie können reguläre Ausdrücke für das zweite und nachfolgende Argument
filter
wie folgt verwenden:Da Sie die Originaldaten nicht angegeben haben, werde ich anhand des
mtcars
Datensatzes ein Spielzeugbeispiel hinzufügen . Stellen Sie sich vor, Sie interessieren sich nur für Autos von Mazda oder Toyota.Wenn Sie es umgekehrt machen möchten, nämlich ohne Toyota und Mazda,
filter
sieht der Befehl folgendermaßen aus:quelle
mtcars$`my type` <- rownames(mtcars)
und dannmtcars %>% filter(grepl('Toyota|Mazda', `my type`))
tbl_sql
as ist,grepl
das nicht in SQL übersetzt wird.Lösung
Es ist möglich,
str_detect
das imstringr
Paket enthaltenetidyverse
Paket zu verwenden.str_detect
gibt zurückTrue
oderFalse
ob der angegebene Vektor eine bestimmte Zeichenfolge enthält. Es ist möglich, mit diesem booleschen Wert zu filtern. Weitere Informationen zumstringr
Paket finden Sie unter Einführung in stringr .Die guten Dinge über Stringr
Wir sollten eher verwenden
stringr::str_detect()
alsbase::grepl()
. Dies liegt daran, dass es folgende Gründe gibt.stringr
Paket bereitgestellten Funktionen beginnen mit dem Präfixstr_
, wodurch der Code leichter lesbar wird.stringr
Pakets ist immer der data.frame (oder Wert), dann kommen die Parameter. (Danke Paolo)Benchmark
Die Ergebnisse des Benchmark-Tests sind wie folgt. Für große Datenrahmen
str_detect
ist schneller.quelle
stringr
Paket bereitgestellten Funktionen beginnen mit dem Präfix str_, wodurch der Code leichter zu lesen ist. In neuerem modernen R-Code wird empfohlen, stringr zu verwenden.base R
das so gut ist wiestringr
. Wenn Sie uns einige „harte Fakten“ wie Benchmarking liefern und nicht nur "es wird empfohlen" angeben (wer empfiehlt es?), Wäre dies sehr dankbar. Vielen DankDiese Antwort ähnelt anderen, verwendet jedoch bevorzugt
stringr::str_detect
und dplyrrownames_to_column
.Erstellt am 26.06.2018 vom reprex-Paket (v0.2.0).
quelle
str_detect
ist imstringr
PaketHier ist eine andere
tidyverse
Lösung mitfilter_at
. Der Vorteil ist, dass Sie problemlos auf mehr als eine Spalte erweitern können. Unten auch eine Lösung mitfilter_all
, um die Zeichenfolge in einer beliebigen Spalte zu finden, amdiamonds
Beispiel der Suche nach der Zeichenfolge "V"Zeichenfolge in einer beliebigen Spalte : verwenden
filter_all
quelle