Фильтрация 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