2016-09-19 2 views
3

내가및 R에 grepl 작업

c <- "1 NA NA 4 5 6 NA NA 9 10 NA NA 13 14 15 16 17 18 19 20 NA NA 23 NA NA NA NA" 

가 어떻게 그것이 1, 5, 6이 포함되어 테스트 grepl 수있는 다음과 같은 문자가 있다고 가정? 15, 16 등을 오 탐지하지 않고?

답변

2
당신은 단어 경계 \\b 1,5,6 주위에 사용할 수 있습니다

:

all(Vectorize(grepl)(paste("\\b", c(1,5,6), "\\b", sep = ""), c)) 
# [1] TRUE 
: 당신이 1,5,6의 모든 문자열에 포함되어있는 경우, 당신은 패턴 위치에 grepl를 벡터화 할 수 있습니다 확인하려면

grepl("\\b[156]\\b", c) 
# [1] TRUE 

문자열에서 1을 제거 할 때 :

c <- "NA NA 4 5 6 NA NA 9 10 NA NA 13 14 15 16 17 18 19 20 NA NA 23 NA NA NA NA" 

grepl("\\b[156]\\b", c) # this is or condition, will still give true 
# [1] TRUE 

all(Vectorize(grepl)(paste("\\b", c(1,5,6), "\\b", sep = ""), c)) # This gives FALSE since 
# pattern \\b1\\b is not there 
# [1] FALSE 
+0

다시 쫓아 가서 죄송합니다. 15와 같이 2 자리 숫자를 추가하는 방법은 무엇입니까? 1, 5, 6, 16을 원할 것입니다. –

+1

붙여 넣기 함수에서 vector에 c (1,5,6,16)로 추가 할 수 있습니다.이 패턴은 \\ b16 \\ b의 패턴을 만들어 16 . – Psidom

+0

마지막 질문 하나 : 당신의 모든 것을 적용하기위한 올바른 접근 방법은 무엇입니까 (벡터화 (grepl) (붙여 넣기 ("\\ b", c (1,5,6), "\\ b", sep = ""), c)) 함수를 data.frame? 예를 들어, 각 행이 만나는 사람들을 부분 집합하기 위해 조건을 충족하는지 여부를 알아 내고 싶습니다. –