2016-11-24 6 views
1

R에서 matchintersect의 차이점을 이해하려고합니다. 모두 동일한 출력을 다른 형식으로 반환합니다. 두 기능간에 차이가 있습니까?R에서 교차와 일치의 차이

match(names(set1), names(set2)) 
# [1] NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 11 

intersect(names(set1), names(set2)) 
# [1] "Year"  "ID" 
+0

http://www.rexamples.com/12/Match() 일치하는 ID가 더 많습니다. 명목상과 비합리적인 것의 사용을 고려하십시오. http://www.endmemo.com/program/R/match.php –

답변

2

match(a, b)는 위치 j되도록 a[i] == b[j]을주는 i 번째 원소, length(a) 정수 벡터를 리턴한다. NA은 기본적으로 no_match으로 생성됩니다 (사용자 정의 할 수도 있음).

당신이 intersect(a, b)와 같은 결과를 얻고 싶은 경우에

는 다음 중 하나를 사용하십시오

b[na.omit(match(a, b))] 
a[na.omit(match(b, a))] 

예에게 그냥 알고 싶어

a <- 1:5 
b <- 2:6 

b[na.omit(match(a, b))] 
# [1] 2 3 4 5 

a[na.omit(match(b, a))] 
# [1] 2 3 4 5 

가 둘 사이의 다른 차이점. 나는 그 결과를 스스로 이해할 수 있었다.

그런 다음 우리는 intersectmatch의 관점에서 기록 된 것으로 나타났다 소스 코드

intersect 
#function (x, y) 
#{ 
# y <- as.vector(y) 
# unique(y[match(as.vector(x), y, 0L)]) 
#} 

를 읽어!

하하, 밖에는 unique을 잊어 버린 것처럼 보입니다. 엠, nomatch = 0L 설정하면 na.omit도 제거 할 수 있습니다. 글쎄, R 코어가 내 추측보다 더 효율적입니다.


후속 우리는 또한 그러나

a[a %in% b] ## need a `unique`, too 
b[b %in% a] ## need a `unique`, too 

을 사용할 수

?match의 읽기 있습니다. "세부 사항"에서 우리는 "%in%" 정의하는 방법을 볼 수 있습니다

"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0 

그래서, 그래, 모든 것이 match를 사용하여 작성됩니다.

+0

둘 다 다른 점이 있는지 알고 싶었습니다. 나는 그 결과를 스스로 이해할 수 있었다. 고맙습니다! – goutam