使用dplyr过滤包含特定string的行

我必须使用包含stringRTB行作为标准来过滤dataframe。 我正在使用dplyr

 d.del <- df %.% group_by(TrackingPixel) %.% summarise(MonthDelivery = as.integer(sum(Revenue))) %.% arrange(desc(MonthDelivery)) 

我知道我可以在dplyr使用函数filter ,但我不知道如何告诉它检查string的内容。

特别是我想检查TrackingPixel列中的内容。 如果string包含标签RTB我想从结果中删除该行。

这个问题的答案已经在上面的评论中被@latemail发布了。 你可以像这样使用正则expression式来处理第二个和后续的filter参数:

 dplyr::filter(df, !grepl("RTB",TrackingPixel)) 

由于您没有提供原始数据,我将使用mtcars数据集添加一个玩具示例。 想象一下,你只对马自达或丰田生产的汽车感兴趣。

 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 

如果你想这样做,即不包括丰田和马自达汽车, filter命令如下所示:

 dplyr::filter(mtcars, !grepl('Toyota|Mazda', type)) 

我们应该使用比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