2014-04-03 3 views
80

문자열로 RTB이 포함 된 행을 기준으로 데이터 프레임을 필터링해야합니다. dplyr을 사용하고 있습니다.dplyr을 사용하여 특정 문자열을 포함하는 행 필터링

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

은 내가 dplyr에서 함수 filter을 사용할 수 있습니다 알고 있지만 정확히 문자열의 내용을 확인하기 위하여 그것을 말하는 방법하지 않습니다.

특히 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 데이터 세트를 사용하여 장난감 예제를 추가합니다. 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 

당신이 즉 도요타와 마쓰다 자동차를 제외한 라운드 그것을 다른 방법을하려는 경우는 filter 명령은 다음과 같습니다 : 우리는 base::grepl()보다는 stringr::str_detect() 사용해야

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

열 이름에 공백이 있으면 어떨까요? 추적 픽셀처럼. – MySchizoBuddy

+3

통계 패키지가 아닌 dplyr 패키지의 필터 함수를 사용하고 있는지 확인하십시오. – JHowIX

+2

@ MySchizoBuddy : 열 이름에 공백이 있으면 backticks를 사용하여 변수를 선택할 수 있습니다. 위 예제의 수정 :'mtcars $ \'my type \' % 필터 (grepl ('Toyota | Mazda', \'my type \'))' – alex23lemm

43

. 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

왜 grep보다 stringr이 더 좋은 옵션입니까? – CameronNemo

+0

@CameronNemo'stringr' 패키지가 제공하는 함수는 str_ 접두어로 시작합니다.이 접두사는 코드를 읽기 쉽게 만듭니다. 최근의 현대 R 코드에서는 stringr을 사용하는 것이 좋습니다. – Keiku

관련 문제