Programing

다른 벡터가 아닌 한 벡터에 무엇이 있는지 어떻게 알 수 있습니까?

crosscheck 2020. 10. 23. 07:35
반응형

다른 벡터가 아닌 한 벡터에 무엇이 있는지 어떻게 알 수 있습니까?


matlab에는 한 벡터에서 값을 찾는 방법이 있지만 다른 벡터에서는 그렇지 않습니다.

예를 들면 :

x <- c(1,2,3,4)
y <- c(2,3,4)

안에 x없는 y이 1 이라는 것을 알려주는 함수가 있습니까?


setdiff () (차이 설정) 함수를 사용할 수 있습니다.

> setdiff(x, y)
[1] 1

예. 벡터의 경우 단순히 %in%연산자 또는 is.element()함수 를 사용할 수 있습니다 .

> x[!(x %in% y)]
1

행렬의 경우 다양한 접근 방식이 있습니다. merge()아마도 가장 간단합니다. 해당 시나리오에 대해이 질문을 살펴 보는 것이 좋습니다 .


setdiff, union, intersect, setequal 및 is.element에 대한 R의 도움말 파일은 R 의 표준 집합 함수에 대한 정보를 제공합니다.

setdiff(x, y)x에없는 요소를 반환합니다 y.

위에서 언급했듯이 이것은 비대칭 차이입니다. 예를 들면 다음과 같습니다.

> x <- c(1,2,3,4)
> y <- c(2,3,4,5)
> 
> setdiff(x, y)
[1] 1
> setdiff(y, x)
[1] 5
> union(setdiff(x, y), setdiff(y, x))
[1] 1 5

x[is.na(match(x,y))]

setdiff()출력이 입력 순서에 따라 달라지기 때문에 까다로운 함수입니다. 대신에와 정반대되는 간단한 함수를 작성할 수 있습니다 intersect. 이것은 훨씬 낫습니다.

>difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}

#Now lets test it. 
>x <- c(1,2,3,4)
>y <- c(2,3,4,5)

>difference(x,y)
[1] 1 5

참고 URL : https://stackoverflow.com/questions/1837968/how-to-tell-what-is-in-one-vector-and-not-another

반응형