2014-04-03 33 views
80

我必須使用包含字符串RTB的行作爲標準來過濾數據幀。 我正在使用dplyr使用dplyr過濾包含某個字符串的行使用dplyr

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

我知道我可以使用該功能filterdplyr,但我不到底如何告訴它來檢查字符串的內容。

特別是我想檢查列TrackingPixel列中的內容。如果字符串包含標籤RTB我想從結果中刪除該行。

+15

我從來沒有使用'dplyr',但是看着在幫助'?dplyr :: filter'我建議像'濾波器(DF,!grepl( 「RTB」,TRACKINGPIXEL))'也許? – thelatemail

+1

這實際上接近我想實現的目標。唯一的問題是維護那些包含「RTB」標籤並且不顯示其他字符串的字符串。 – Gianluca

+0

我剛剛進行了一次隱形編輯,現在通過在'grepl'前添加'!'來反轉 - 再試一次。 – thelatemail

回答

135

該問題的答案已由@latemail發佈在上面的評論中。您可以使用正則表達式的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)) 
+0

如果列名包含空格,該怎麼辦?像跟蹤像素。 – MySchizoBuddy

+3

確保您使用的是dplyr包中的過濾器函數,而不是統計信息包 – JHowIX

+2

@MySchizoBuddy:如果列名包含空格,則可以使用反引號來選擇變量。修改上面的例子:'mtcars $ \'我的類型'< - rownames(mtcars)''然後 'mtcars%>%filter(grepl('Toyota | Mazda',\'my type \'))' – alex23lemm

43

我們應該使用,而不是stringr::str_detect()base::grepl()。有關stringr軟件包的詳細信息,請參閱Introduction to 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 
+0

這也適用於正則表達式! – HNSKD

+0

爲什麼stringr比grep更好? – CameronNemo

+0

@CameronNemo'stringr'包提供的函數以str_開頭,這使得代碼更容易閱讀。在最近的現代R代碼中,建議使用stringr。 – Keiku