2016-09-29 4 views
0

내가R grepl 및 필터 dataframe

Col1  Col2 
    10  How to; bus; car; 
    11  How to; 
    12  How to 
    13  How to; bus 
    14  How to; car 

는 내가 뭘하려고하면 dataframe을 필터링 할 수있는 다음과 같은 값을 가진 두 개의 열을 포함하는 dataframe을 처리하고 같은 그 How to 또는 How to; 같은 값을 포함하는 행만 유지되고 나머지는 폐기됩니다. 따라서 최종 데이터 프레임은 아래와 같습니다.

Col1  Col2 
    11  How to; 
    12  How to 

이것은 내가 시도한 것입니다.

filter(df, grepl('How to;|How to', Col2)) 

전체 데이터 프레임을 보여주는이 기능은 작동하지 않습니다. 내가 어디로 잘못 가고 있는지 확실하지 않습니다. 어떤 도움이라도 대단히 감사합니다.

+3

각 패턴에'$'의 줄 끝을 추가해야합니다. – rawr

+1

정확한 일치를 위해 정규식을 사용하지 마십시오. 필터 (df, Col2 == "How to;"| Col2 == "사용법")'또는 dplyr을 전혀 사용하지 않고'df [와 (df, Col2 == "How to;"| Col2 == "How to"),]'또는'subset (df, Col2 == "How to;"| Col2 == "사용법"). Btw, 당신은 항상 –

+0

'df %> % filter (grepl ('How;? $', Col2))'또는'df [grep ('How;;? $', df $ Col2)),]' – alistaire

답변

1

나는 의견이 적절한 답을 제공했다고 생각하지만, 나는 당신에게 당신의 원래 질문에 더 가까운 대답을 줄 것이라고 생각했다.

df %>% filter(!(grepl('bus', .$Col2) | grepl('car', .$Col2))) 

다양한 차이점에 유의하십시오. 귀하의 예에서 첫 번째 또는 연산자 |가 패턴 내부에 나타납니다. 이 평균 R은 문자 그대로 'How to;|How to'이 아니며 'How to;' 또는 'How to'이 아닙니다. 두 번째 주목 어떻게 열 이름에 .$을 추가합니다. dplyr을 사용할 때 .은 전달한 데이터의 줄임말입니다. 따라서 df$Col2도 효과가있었습니다. 인수가 base R 함수에 전달되고 dplyr 함수에 전달되지 않으므로이 값이 필요합니다. 마지막으로 grepl은 정확한 일치 항목을 찾지 못하기 때문에 df %>% filter((grepl('How to', .$Col2) | grepl('How to:', .$Col2))) 코드는 작동하지 않습니다. 오히려 패턴을 포함하는 인스턴스를 찾습니다. 정확한 일치를 찾을 수 있지만 정규식 메타 문자를 사용해야합니다. 따라서 df %>% filter((grepl('How to', .$Col2) | grepl('How to:', .$Col2)))은 전체 데이터 세트 즉 현재 출력을 반환합니다.

+0

Jacob에게 감사드립니다. 나는 이것을 시도 할 것입니다. –