수색…


비고

집합에는 고유 한 요소 각각에 대해 하나의 복사본 만 포함됩니다. 다른 프로그래밍 언어와 달리, 기본 R에는 집합에 대한 전용 데이터 형식이 없습니다. 대신 R은 별개의 요소 만 사용하여 집합과 같은 벡터를 처리합니다. 이것은 set 연산자, setdiff , intersect , union , setequal%in% 됩니다. v %in% S 경우 S 만 집합으로 처리되지만 벡터 v 는 처리되지 않습니다.

R의 실제 세트 데이터 유형의 경우, Rcpp 패키지는 몇 가지 옵션을 제공합니다.

벡터 쌍에 대한 연산자 설정

세트 비교

R에서 벡터는 중복 된 요소를 포함 할 수 있습니다.

v = "A"
w = c("A", "A")

그러나 집합에는 각 요소의 복사본이 하나만 포함됩니다. R은 별개의 요소만을 취하여 집합과 같은 벡터를 처리하므로 위의 두 벡터는 동일하게 간주됩니다.

setequal(v, w)
# TRUE

집합 결합

주요 기능은 자연적인 이름을 가지고 있습니다 :

x = c(1, 2, 3)
y = c(2, 4)

union(x, y)
# 1 2 3 4

intersect(x, y)
# 2

setdiff(x, y)
# 1 3

이것들은 모두 같은 페이지, 즉 ?union 에 문서화되어 있습니다.

벡터에 대한 멤버십 설정

%in% 연산자는 벡터와 세트를 비교합니다.

v = "A"
w = c("A", "A")

w %in% v
# TRUE TRUE

v %in% w
# TRUE

왼쪽에있는 각 요소는 개별적으로 처리되며 오른쪽에있는 벡터와 연결된 집합의 멤버십에 대해 테스트됩니다 (모든 별개 요소로 구성됨).

평등 테스트와 달리 %in% 항상 TRUE 또는 FALSE 반환 FALSE .

c(1, NA) %in% c(1, 2, 3, 4)
# TRUE FALSE

문서는 ?`%in%` 있습니다.

벡터의 직교 또는 "십자가"곱

(x, y) 형태의 모든 벡터를 찾기 위해 x는 벡터 X에서 그리고 Y는 Y expand.grid 하기 위해 expand.grid 를 사용 expand.grid :

X = c(1, 1, 2)
Y = c(4, 5)

expand.grid(X, Y)

#   Var1 Var2
# 1    1    4
# 2    1    4
# 3    2    4
# 4    1    5
# 5    1    5
# 6    2    5

결과는 전달 된 각 벡터에 대해 하나의 열이있는 data.frame입니다. 종종 우리는 벡터의 "그리드"를 확장하기보다는 세트의 데카르트 곱을 취하고 싶습니다. 우리는 unique lapplydo.call 사용할 수 있습니다.

m = do.call(expand.grid, lapply(list(X, Y), unique))

#   Var1 Var2
# 1    1    4
# 2    2    4
# 3    1    5
# 4    2    5

조합에 기능 적용

결과 조합 f(x,y) 각각에 함수를 적용하려면 다른 열로 추가 할 수 있습니다.

m$p = with(m, Var1*Var2)
#   Var1 Var2  p
# 1    1    4  4
# 2    2    4  8
# 3    1    5  5
# 4    2    5 10

이 접근법은 우리가 필요로하는만큼 많은 벡터에 대해 작동하지만, 2의 특수한 경우에는 때때로 행렬에 결과를 저장하는 것이 더 적합합니다. 이는 outer 하여 수행 할 수 있습니다.

uX = unique(X)
uY = unique(Y)

outer(setNames(uX, uX), setNames(uY, uY), `*`)

#   4  5
# 1 4  5
# 2 8 10

관련 개념 및 도구는 조합론 항목을 참조하십시오.

고유 한 / 중복 된 사본 만들기 / 벡터에서 고유 한 요소 선택

unique 상품 중복은 결과의 각 요소가 고유하도록 중복됩니다 (한 번만 나타남).

x = c(2, 1, 1, 2, 1)

unique(x)
# 2 1

값은 처음 나타난 순서대로 반환됩니다.

각 중복 duplicated 태그에 duplicated 태그 표시 :

duplicated(x)
# FALSE FALSE TRUE TRUE TRUE

anyDuplicated(x) > 0L 은 벡터에 중복 된 것이 있는지를 빠르게 확인할 수있는 방법입니다.

벡터에 대한 세트 중첩 / 벤 다이어그램 측정

두 세트의 몇 요소가 겹치는 지 계산하려면 사용자 정의 함수를 작성할 수 있습니다.

xtab_set <- function(A, B){
    both    <-  union(A, B)
    inA     <-  both %in% A
    inB     <-  both %in% B
    return(table(inA, inB))
}

A = 1:20
B = 10:30

xtab_set(A, B)

#        inB
# inA     FALSE TRUE
#   FALSE     0   10
#   TRUE      9   11

다양한 패키지에 의해 제공되는 Venn 다이어그램을 사용하여 여러 세트의 중복 카운트를 시각화 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow