집합 union(합집합), intersect(교집합), setdiff(차집합) 계산

  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

댓글 없음:

댓글 쓰기

[주식 클로드 자동매매 프로젝트] 제2편. 데이터 인프라 구축 — 모델보다 데이터가 먼저다

 머신러닝 모델을 이야기하기 전에, 그 모델이 먹는 데이터가 어디서 어떻게 왔는지부터 정직하게 밝혀야 한다. 이 프로젝트에서 가장 많은 시간이 들어간 부분은 화려한 모델 튜닝이 아니라, "내가 정말 그 데이터를 갖고 있는가"를 확인하...