Фильтрация строки, содержащей определенную строку с использованием dplyr
Мне нужно отфильтровать фрейм данных, используя в качестве критерия те строки, в которых содержится строка RTB
.
Я использую dplyr
.
d.del <- df %.%
group_by(TrackingPixel) %.%
summarise(MonthDelivery = as.integer(sum(Revenue))) %.%
arrange(desc(MonthDelivery))
Я знаю, что могу использовать функцию filter
в dplyr
, но я не знаю, как сказать ей, чтобы проверить содержимое строки.
В частности, я хочу проверить содержимое в столбце TrackingPixel
. Если строка содержит метку RTB
, я хочу удалить строку из результата.
Ответы
Ответ 1
Ответ на вопрос уже был отправлен @latemail в комментариях выше. Вы можете использовать регулярные выражения для второго и последующих аргументов filter
следующим образом:
dplyr::filter(df, !grepl("RTB",TrackingPixel))
Поскольку вы не предоставили исходные данные, я добавлю пример игрушки, используя набор данных mtcars
. Представьте, что вас интересуют только автомобили, выпускаемые Mazda или Toyota.
mtcars$type <- rownames(mtcars)
dplyr::filter(mtcars, grepl('Toyota|Mazda', type))
mpg cyl disp hp drat wt qsec vs am gear carb type
1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4
2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag
3 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 Toyota Corolla
4 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 Toyota Corona
Если вы хотите сделать это наоборот, а именно без автомобилей Toyota и Mazda, команда filter
выглядит так:
dplyr::filter(mtcars, !grepl('Toyota|Mazda', type))
Ответ 2
Мы должны использовать скорее stringr::str_detect()
, чем base::grepl()
. Подробнее о пакете stringr
см. Введение в stringr.
library(tidyverse)
library(stringr)
mtcars$type <- rownames(mtcars)
mtcars %>%
filter(str_detect(type, 'Toyota|Mazda'))
# mpg cyl disp hp drat wt qsec vs am gear carb type
# 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4
# 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag
# 3 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 Toyota Corolla
# 4 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 Toyota Corona