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
답변
만약:
x <- c(1,2,3,4)
y <- c(2,3,4)
다음 표현식 중 하나 :
setdiff(x, y)
x[!(x %in% y)]
x[is.na(match(x,y))]
x[!(is.element(x,y))]
에 존재하지 않는 [1] 1
의 값 / 문자를 찾는 것이 목표 인 경우 정답을 제공합니다 .x
y
그러나 위의 표현식을 적용하는 것은 까다로울 수 있으며 벡터의 특성과 표현식에서 x 및 y의 위치에 따라 원하지 않는 결과를 얻을 수 있습니다. 예를 들어 :
x <- c(1,1,2,2,3,4)
y <- c(2,3,4)
목표는에 x
존재하지 y
않거나 그 반대의 에서 고유 한 값 / 문자를 찾는 것 입니다. 이 표현 중 하나를 적용해도 올바른 답을 얻을 수 있습니다 [1] 1
.
union(setdiff(x, y), setdiff(y, x))
Jeromy Anglim의 기여 덕분에
또는:
difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)
Workhouse의 기여 덕분에