Observaciones de filtrado en dplyr en combinación con grepl

Estoy tratando de averiguar cómo filtrar algunas observaciones de un gran conjunto de datos usandodplyr ygrepl . No estoy casado congrepl, si otras soluciones serían más óptimas.

Tome esta muestra 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

Quiero:

filtrar esos casos que comienzan con 'x'filtrar los casos que terminan con 'xx'

Me las he arreglado para descubrir cómo deshacerme de todo lo que contiene 'x' o 'xx', pero que no comienza ni termina con. Aquí se explica cómo deshacerse de todo con 'xx' dentro (no solo terminando con):

df1 %>%  filter(!grepl("xx",fruit))

#    fruit group
#1   apple     A
#2  orange     B
#3  xapple     A
#4 xorange     B
#5 banxana     A

Esto obviamente 'erróneamente' (desde mi punto de vista) filtró 'appxxle'.

Nunca he entendido completamente las expresiones regulares. He estado tratando de modificar código como:grepl("^(?!x).*$", df1$fruit, perl = TRUE) para intentar que funcione dentro del comando de filtro, pero no lo entiendo del todo.

Rendimiento esperado:

#      fruit group
#1     apple     A
#2    orange     B
#3   banxana     A
#4   appxxle     B

Me gustaría hacer esto adentrodplyr si es posible.

Respuestas a la pregunta(1)

Su respuesta a la pregunta