Я пытаюсь определить, как фильтровать некоторые наблюдения из большого набора данных, используя dplyr
и grepl
. Я не привязан к grepl
, если другие решения будут более оптимальными.Фильтрация наблюдений в dplyr в сочетании с grepl
Возьмите этот образец ДФ:
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
Я хочу:
- отфильтровывает те случаи, начинающиеся с 'х'
- отфильтровывает те случаи, заканчивающиеся 'XX'
Мне удалось решить, как избавиться от всего, что содержит «x» или «xx», но не начиная с o r заканчивается на. Вот как избавиться от всего, с «хх» внутри (а не только заканчивается):
df1 %>% filter(!grepl("xx",fruit))
# fruit group
#1 apple A
#2 orange B
#3 xapple A
#4 xorange B
#5 banxana A
Это, очевидно, «ошибочно» (с моей точки зрения), фильтруют «appxxle».
Я до сих пор не справился с регулярными выражениями. Я пытаюсь изменить код, например: grepl("^(?!x).*$", df1$fruit, perl = TRUE)
, чтобы попытаться заставить его работать в команде фильтра, но я не совсем понял его.
Ожидаемый результат:
# fruit group
#1 apple A
#2 orange B
#3 banxana A
#4 appxxle B
Я хотел бы сделать это внутри dplyr
, если это возможно.