Sto cercando di capire come filtrare alcune osservazioni da un set di dati di grandi dimensioni utilizzando dplyr
e grepl
. Non sono sposato a grepl
, se altre soluzioni sarebbero più ottimali.Filtraggio delle osservazioni in dplyr in combinazione con grepl
prendere questo campione 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
Voglio:
- filtro quei casi che iniziano con 'x'
- filtro quei casi che terminano con 'xx'
Sono riuscito a capire come eliminare tutto ciò che contiene 'x' o 'xx', ma non iniziare con o r che termina con. Ecco come sbarazzarsi di tutto ciò con 'xx' all'interno (non solo termina con):
df1 %>% filter(!grepl("xx",fruit))
# fruit group
#1 apple A
#2 orange B
#3 xapple A
#4 xorange B
#5 banxana A
Questo, ovviamente, 'erroneamente' (dal mio punto di vista) filtrato 'appxxle'.
Non ho mai preso completamente in considerazione le espressioni regolari. Ho provato a modificare il codice come ad esempio: grepl("^(?!x).*$", df1$fruit, perl = TRUE)
per provare a farlo funzionare all'interno del comando filtro, ma non riesco a ottenerlo.
risultato atteso:
# fruit group
#1 apple A
#2 orange B
#3 banxana A
#4 appxxle B
Mi piacerebbe fare questo all'interno dplyr
, se possibile.