dplyr

2014-04-03 14 views
80

'u kullanarak belirli bir dizeyi içeren süzgeçleme satırı Bir veri çerçevesini, RTB dizesini içeren diziyi ölçüt olarak kullanarak filtrelemem gerekiyor. dplyr kullanıyorum.dplyr

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

ben dplyr işlevi filter kullanabilirsiniz biliyorum ama tam olarak bir dize içeriği kontrol edecek şekilde nasıl söyleyeceğini yok. Özellikle, TrackingPixel numaralı sütunda içeriği kontrol etmek istiyorum. Dize, RTB etiketini içeriyorsa, satırdaki sonucu kaldırmak istiyorum.

+15

'dplyr' fakat yardım bakarak'? Dplyr :: filter' i belki 'filtresi' gibi bir şey (df,! Grepl ("GZT", TrackingPixel)) öneririm ? – thelatemail

+1

Bu aslında ulaşmak istediklerime yakın. Tek mesele, 'RTB' etiketini içeren ve diğerlerini göstermeyen dizeleri sürdürmektir. – Gianluca

+0

Sadece gizli bir düzenlemeye girdim, şimdi '' 'grepl'nin önüne eklenerek tersine döndü - tekrar deneyin. – thelatemail

cevap

135

Sorunun cevabı, yukarıdaki yorumlarda @latemail tarafından zaten gönderilmişti. Böyle filter ikinci ve sonraki bağımsız değişkenler için normal ifadeleri kullanabilirsiniz:

orijinal veriyi sağlamadıysanız yana
dplyr::filter(df, !grepl("RTB",TrackingPixel)) 

, ben mtcars veri seti kullanılarak bir oyuncak örneğini ekleyecektir. Sadece Mazda veya Toyota tarafından üretilen arabalarla ilgilendiğinizi hayal edin.

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 

sen yani Toyota ve Mazda arabalar hariç, yuvarlak başka bir yol yapmak istiyorsanız, filter komut şuna benzer: Biz base::grepl() yerine stringr::str_detect() kullanmalıdır

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

sütun adı bir boşluk içeriyorsa. Pikselleri İzleme gibi. – MySchizoBuddy

+3

filtre işlevini dplyr paketinden kullandığınızdan emin olun, istatistik paketi değil – JHowIX

+2

@MySchizoBuddy: Sütun adı beyaz boşluk içeriyorsa, değişkenleri backticks kullanarak seçebilirsiniz. Yukarıdaki örneği değiştirerek: 'mtcars $ \' türüm \ '<- rownames (mtcars)' ve sonra ' mtcars%> filtre (grepl ('Toyota | Mazda', \ 'my type \')) ' – alex23lemm

43

. stringr paketi ile ilgili ayrıntılar için bkz. Introduction to stringr. Ben hiç kullanmamış

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

Bu, regex ile de çalışır! – HNSKD

+0

Stringr neden grep'ten daha iyi bir seçenek? – CameronNemo

+0

@CameronNemo 'stringr' paketi tarafından sağlanan işlevler kodu daha kolay okunan str_ öneki ile başlar. Son modern R kodunda, stringr kullanılması önerilir. – Keiku