R語言中的集合運算操作,在很多時候可以省掉for
循環帶來的開銷成本。我們知道在集合對元素的操作有並,交,補,取餘等,下面直接代碼介紹:
#集合A
> A<-1:10
> A
[1] 1 2 3 4 5 6 7 8 9 10
> #集合B
> B<-seq(5,15,2)
> B
[1] 5 7 9 11 13 15
>集合C
> C<-1:5
> C
[1] 1 2 3 4 5
# 求A和B的並集
> union(A,B)
[1] 1 2 3 4 5 6 7 8 9 10 11 13 15
#求A和B的交集
> intersect(A,B)
[1] 5 7 9
> setdiff(A,B) #求A-B 即屬於A但不屬於B的元素
[1] 1 2 3 4 6 8 10
> setequal(A,B) #檢驗集合是否相同
[1] FALSE
> is.element(12,C) #檢驗12是否屬於集合C
[1] FALSE
> all(C%in%A) #檢驗C是否是A的子集
[1] TRUE
附錄:
union(x, y) #集合的並
intersect(x, y) #集合的交
setdiff(x, y) # x-y
setequal(x, y) # 集合x與y是否相等
> set.seed(2015)
> (x <- c(sort(sample(1:20, 9)), NA))
[1] 1 2 3 6 7 8 16 18 20 NA
> (y <- c(sort(sample(3:23, 7)), NA))
[1] 3 9 10 13 14 16 17 NA
> union(x, y)
[1] 1 2 3 6 7 8 16 18 20 NA 9 10 13 14 17
> intersect(x, y)
[1] 3 16 NA
> setdiff(x, y)
[1] 1 2 6 7 8 18 20
> setdiff(y, x)
[1] 9 10 13 14 17
> setequal(x, y)
[1] FALSE
> is.element(x, y) # length 10
[1] FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
> is.element(y, x) # length 8
[1] TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE`