Я должен фильтровать фрейм данных, используя в качестве критерия те строки, в которых содержится строка RTB
.
Я использую dplyr
.
d.del <- df %>%
group_by(TrackingPixel) %>%
summarise(MonthDelivery = as.integer(sum(Revenue))) %>%
arrange(desc(MonthDelivery))
Я знаю , что могу использовать функцию filter
в dplyr
но я не точно , как сказать ему , чтобы проверить содержимое строки.
В частности, я хочу проверить содержимое в столбце TrackingPixel
. Если строка содержит метку, RTB
я хочу удалить строку из результата.
dplyr
, но, глядя на помощь,?dplyr::filter
я бы предложил что-то вроде,filter(df, !grepl("RTB",TrackingPixel))
может быть?RTB
и не показывать другие.!
передgrepl
- попробуйте еще раз.invert
и . Регулярные выражения облегчают работу с текстом в тысячу раз.value
grep
grepl
не работает на postgres для меня, это для MySQL?Ответы:
Ответ на вопрос уже был опубликован @latemail в комментариях выше. Вы можете использовать регулярные выражения для второго и последующих аргументов
filter
вроде этого:Поскольку вы не предоставили исходные данные, я добавлю игрушечный пример с использованием
mtcars
набора данных. Представьте, что вас интересуют только автомобили производства Mazda или Toyota.Если вы хотите сделать это наоборот, а именно, за исключением автомобилей Toyota и Mazda,
filter
команда выглядит так:источник
mtcars$`my type` <- rownames(mtcars)
а затемmtcars %>% filter(grepl('Toyota|Mazda', `my type`))
tbl_sql
какgrepl
не переводится в SQL.Решение
Можно использовать
str_detect
вstringr
пакете , включенного вtidyverse
пакет.str_detect
возвращаетTrue
илиFalse
относительно того, содержит ли указанный вектор некоторую определенную строку. Можно фильтровать, используя это логическое значение. См. Введение в stringr для получения подробной информации оstringr
пакете.Хорошие вещи о Stringr
Мы должны использовать, а
stringr::str_detect()
неbase::grepl()
. Это потому, что есть следующие причины.stringr
пакетом, начинаются с префиксаstr_
, что облегчает чтение кода.stringr
пакета всегда является data.frame (или значение), затем идут параметры. (Спасибо, Паоло)эталонный тест
Результаты контрольного теста следующие. Для больших данных,
str_detect
быстрее.источник
stringr
пакетом, начинаются с префикса str_, что облегчает чтение кода. В современном современном коде R рекомендуется использовать stringr.base R
так же хорош, какstringr
. Если бы вы предоставили нам некоторые «неопровержимые факты», такие как сравнительный анализ, а не только указание «рекомендуется» (кто это рекомендует?), Это будет высоко оценено. СпасибоЭтот ответ похож на другие, но с использованием предпочтения
stringr::str_detect
и dplyrrownames_to_column
.Создано в 2018-06-26 пакетом представлением (v0.2.0).
источник
str_detect
находится вstringr
пакетеизменить включил новый
across()
синтаксисВот другое
tidyverse
решение, используяfilter(across())
или ранееfilter_at
. Преимущество заключается в том, что вы можете легко расширить несколько столбцов .Ниже также решение
filter_all
для того, чтобы найти строку в любом столбце, используя вdiamonds
качестве примера поиск строки «V»Строка только в одном столбце
Теперь замененный синтаксис для того же будет:
Строка во всех столбцах:
Теперь замененный синтаксис для того же будет:
Я пытался найти альтернативу для следующего, но я не сразу нашел хорошее решение:
Обновление: спасибо пользователю Петру Кайзару в этом ответе , здесь также подход для вышеупомянутого:
источник