[r] 벡터에 주어진 요소가 포함되어 있는지 테스트

벡터에 주어진 값이 포함되어 있는지 확인하는 방법은 무엇입니까?



답변

이를 위해 match()(첫 번째 모양을 반환) 및 %in%(부울을 반환) 기능이 모두 설계되었습니다.

v <- c('a','b','c','e')

'b' %in% v
## returns TRUE

match('b',v)
## returns the first location of 'b', in this case: 2


답변

is.element() 더 읽기 쉬운 코드를 만들고 %in%

v <- c('a','b','c','e')

is.element('b', v)
'b' %in% v
## both return TRUE

is.element('f', v)
'f' %in% v
## both return FALSE

subv <- c('a', 'f')
subv %in% v
## returns a vector TRUE FALSE
is.element(subv, v)
## returns a vector TRUE FALSE


답변

출력을 기준으로 옵션을 그룹화합니다. 모든 예제에 대해 다음 벡터를 가정하십시오.

v <- c('z', 'a','b','a','e')

존재 여부 확인 :

%에%

> 'a' %in% v
[1] TRUE

어떤()

> any('a'==v)
[1] TRUE

is.element ()

> is.element('a', v)
[1] TRUE

첫 번째 발생을 찾기 위해 :

시합()

> match('a', v)
[1] 2

모든 벡터를 지수 벡터로 찾기 :

어느()

> which('a' == v)
[1] 2 4

모든 발생을 논리 벡터로 찾기 위해 :

==

> 'a' == v
[1] FALSE  TRUE FALSE  TRUE FALSE

편집 : 주석에 언급 된 이유로 목록에서 grep ()grepl () 제거


답변

어떤 () 가 읽을 수있는 코드에 대한 함수 만든다

> w <- c(1,2,3)
> any(w==1)
[1] TRUE

> v <- c('a','b','c')
> any(v=='b')
[1] TRUE

> any(v=='f')
[1] FALSE


답변

%in%연산자 를 사용할 수 있습니다 :

vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false


답변

또한 “어떤”요소의 위치를 ​​찾기 위해

pop <- c(3,4,5,7,13)

which(pop==13)

대상 벡터에 포함되지 않은 요소를 찾으려면 다음을 수행하십시오.

pop <- c(1,2,4,6,10)

Tset <- c(2,10,7)   # Target set

pop[which(!(pop%in%Tset))]


답변

나는이 목적을 위해 grep ()과 grepl ()을 정말로 좋아합니다.

grep ()은 일치하는 위치를 나타내는 정수 벡터를 반환합니다.

yo <- c("a", "a", "b", "b", "c", "c")

grep("b", yo)
[1] 3 4

grepl ()은 일치하는 위치에 “TRUE”인 논리 형 벡터를 반환합니다.

yo <- c("a", "a", "b", "b", "c", "c")

grepl("b", yo)
[1] FALSE FALSE  TRUE  TRUE FALSE FALSE

이 기능은 대소 문자를 구분합니다.