Próbuję opracować sposób filtrowania niektórych obserwacji z dużego zestawu danych przy użyciu dplyr
i grepl
. Nie jestem związana z grepl
, jeśli inne rozwiązania byłyby bardziej optymalne.Filtrowanie obserwacji w dplyr w połączeniu z grepl
Weź tę próbkę DF:
df1 <- data.frame(fruit=c("apple", "orange", "xapple", "xorange",
"applexx", "orangexx", "banxana", "appxxle"), group=c("A", "B"))
df1
# fruit group
#1 apple A
#2 orange B
#3 xapple A
#4 xorange B
#5 applexx A
#6 orangexx B
#7 banxana A
#8 appxxle B
chcę:
- filtr przypadki, rozpoczynające się od 'x'
- filtr przypadki, kończące się 'xx'
Udało mi się znaleźć sposób na pozbycie się wszystkiego, co zawiera "x" lub "xx", ale nie zaczynając od o r kończy się na. Oto w jaki sposób pozbyć się wszystkiego z „xx” w środku (nie tylko kończąc):
df1 %>% filter(!grepl("xx",fruit))
# fruit group
#1 apple A
#2 orange B
#3 xapple A
#4 xorange B
#5 banxana A
To oczywiście „błędnie” (z mojego punktu widzenia) filtruje „appxxle”.
Nigdy nie miałem do czynienia z wyrażeniami regularnymi. Próbowałem zmodyfikować kod, taki jak: grepl("^(?!x).*$", df1$fruit, perl = TRUE)
, aby spróbować uruchomić go w ramach polecenia filtru, ale nie całkiem go rozumiem.
wyjście z oczekiwaniami:
# fruit group
#1 apple A
#2 orange B
#3 banxana A
#4 appxxle B
Chciałbym zrobić to wewnątrz dplyr
jeśli to możliwe.