Filtrando observações no dplyr em combinação com o grepl

Estou tentando descobrir como filtrar algumas observações de um grande conjunto de dados usandodplyr egrepl . Eu não sou casado comgrepl, se outras soluções forem mais ideais.

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

Eu quero:

filtrar os casos que começam com 'x'filtrar os casos que terminam com 'xx'

Eu consegui descobrir como me livrar de tudo que contém 'x' ou 'xx', mas não começando ou terminando com. Aqui está como se livrar de tudo com 'xx' dentro (não apenas terminando com):

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

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

Isso obviamente 'erroneamente' (do meu ponto de vista) filtrou 'appxxle'.

Eu nunca consegui entender completamente as expressões regulares. Eu tenho tentado modificar o código como:grepl("^(?!x).*$", df1$fruit, perl = TRUE) para tentar fazê-lo funcionar dentro do comando filter, mas não estou conseguindo.

Saída esperada:

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

Eu gostaria de fazer isso por dentrodplyr se possível.

questionAnswers(1)

yourAnswerToTheQuestion