R에서 vector union(합집합), intersect(교집합), setdiff(차집합)은 실무에서는 데이터 기준을 세우고 돌릴때, 사용이 많이 된다. 벡터를 추가 하거나, 필요한 것만 불러 올 경우에는 집합 계산을 할 수 있다.
집합 union(합집합), intersect(교집합), setdiff(차집합) 계산
집합 연산을 위한 주요 함수는 3개가 있습니다. 두집합에 대한 예제를 통한 연산 원칙을 이해해봅시다.
setA <- c("a", "b", "c", "d", "e")
setB <- c("d", "e", "f", "g")
다음은 두 집합이 공통으로 갖고 있는 값과 아닌 값이 무엇인지에 알아봅시다. 합집합 연산은 두 집합이 갖고 있는 것을 모두 합한 것이지마 두 집합에 공통으로 존재하는 것은 한번만 계산 됩니다.
union(setA, setB)
## [1] "a" "b" "c" "d" "e" "f" "g"
교집합 연산은 공통으로 갖고 있는 요소를 계산한 결과 입니다.
intersect(setA, setB)
## [1] "d" "e"
그러나 2개의 집합 간의 차이 연산은 순서에 의존합니다. 첩 번째 명명된 집합에 있는 요소가 두번째 명명된 집합에는 없는 요소가 됩니다. 따라서 setdiff(A,B)와 setdiff(B,A)의 결과는 서로 다릅니다. 예를들면 다음과 같습니다.
setdiff(setA, setB)
## [1] "a" "b" "c"
setdiff(setB, setA)
## [1] "f" "g"
따라서 setdiff(setA, setB)결과와 insersect(setA, setB)결과에 setdiff(setB, setA)결과를 합하면 두 집합에 대한 합집합은 union 연산과 같다.
all(c(setdiff(setA,setB),intersect(setA,setB), setdiff(setB,setA)) == union(setA,setB))
## [1] TRUE
집합에 대한 비교는 %in%를 사용해 좌측집합의 요소가 우측집합에 존재하는지 여부를 계산 한 논리 벡터를 계산할 수 있다.
setA %in% setB
## [1] FALSE FALSE FALSE TRUE TRUE
setB %in% setA
## [1] TRUE TRUE FALSE FALSE
댓글 없음:
댓글 쓰기