2016-08-02 4 views
5

데이터 프레임 열을 가져 와서 문자열 벡터의 텍스트가 포함되어 있는지 확인하고 일치시 문자열을 필터링합니다 (부분 텍스트 일치 포함). .r - 벡터 문자열을 포함하는 행 필터링

예를 들어, 다음 데이터 프레임 걸릴 : 확인,

animal  |count 
aardvark |8 
cat  |2 
catfish |6 
dog  |12 
dolphin |3 
penguin |38 
prairie dog|59 
zebra  |17 

c("cat", "dog") 

내가 '동물'칼럼을 통해 실행하고자하는 다음과 같은 벡터를 경우 값 전체 또는 벡터의 문자열 중 하나에 부분적으로 일치하고 그렇지 않은 것을 필터링합니다. 결과 데이터 프레임은 다음과 같습니다.

animal  |count 
cat  |2 
catfish |6 
dog  |12 
prairie dog|59 

고맙습니다!

+1

'grep' :'df [grepl ("cat | dog)", df $ animal),]'가 작동해야합니다. – lmo

답변

5

우리는 grep

df1[grep(paste(v1, collapse="|"), df1$animal),] 

또는 dplyr를 사용 dplyr

df1 %>% 
    filter(grepl(paste(v1, collapse="|"), animal)) 
+1

그랬어, 고마워! –

7

사용하여, 당신은 다음, 가정 테이블이 df이다 시도 할 수 있습니다 사용할 수 있습니다

,
library(dplyr) 
library(stringr) 
animalList <- c("cat", "dog") 
filter(df, str_detect(animal, paste(animalList, collapse="|"))) 

개인적으로 내 코드를 검토 할 때 dplyrstringr을 사용하면 더 쉽게 읽을 수 있습니다.

+0

'동물'열과 정확히 일치하지 않으므로 어떻게 작동하는지 잘 모르겠습니다. – akrun

+0

실제 데이터 프레임의 구조는 무엇입니까? 장난감 데이터를 포함한 재현 가능한 예제가 있습니까? – Megatron

+0

이 문제는 부분 일치 (메기 및 대초원 개)가 아닌 정확한 일치 (고양이 및 개) 만 필터링한다는 점에서 문제가 있습니다. 나는 그것을 지정해야만했다. 그래도 고맙습니다. –