Фильтрация dataframe по регулярному выражению в R

Есть dataframe

id answer
1 строка
2 34234
3
4 NA

Мне надо выбрать dataframe без пустой строки 3. Пытаюсь через dataframe %>% filter(answer==".") но понимаю, что это бред и запрос не правильный. как правильно фильтровать? Ошибка в регулярном выражении или в формате данных, которые выдает answer=="." ?


Ответы (1 шт):

Автор решения: aleksandr barakin

регулярное выражение можно указать с помощью функции grepl() из пакета base.

данные:

> d <- data.frame(id=c(1:4),answer=c('строка','34234','','NA'))
> d
  id answer
1  1 строка
2  2  34234
3  3       
4  4     NA

фильтр:

> d[grepl('.', d$answer),]
  id answer
1  1 строка
2  2  34234
4  4     NA

если вам нужно именно с функцией filter() из пакета dplyr, то можно так:

> filter(d, grepl('.', answer))
  id answer
1  1 строка
2  2  34234
3  4     NA

или так:

> d %>% filter(grepl('.', answer))
  id answer
1  1 строка
2  2  34234
3  4     NA

другой вариант — функция str_detect() из пакета stringr:

> d[str_detect(d$answer, '.'),]
  id answer
1  1 строка
2  2  34234
4  4     NA
> filter(d, str_detect(answer, '.'))
  id answer
1  1 строка
2  2  34234
3  4     NA
> d %>% filter(str_detect(answer, '.'))
  id answer
1  1 строка
2  2  34234
3  4     NA
→ Ссылка