一、首先介绍三个函数,这三个函数说得上是三兄弟:
R语言函数intersect、union、setdiff
1、intersect
两个向量的交集
intersect(x=c(1:8, NA), y = c(2:8, NA))
[1] 2 3 4 5 6 7 8 NA
# 两个字符串向量的交集只有一个元素 "abc"
intersect(x=c("abc", "bcd"), y = c("abc", 12, "BioWolf"))
[1] "abc"
|
|
2、union
求两个向量的并集
集合可以是任何数值类型
union(x=1:5, y=2:8)
[1] 1 2 3 4 5 6 7 8
union(x=c("abc", "26"), y=c("bcd", "BioWolf"))
[1] "abc" "26" "bcd" "BioWolf"
|
3、setdiff
求向量x与向量y中不同的元素(只取x中不同的元素)
setdiff(x, y)
setdiff(x=1:8, y=2:6)
[1] 1 7 8
|
二、两个以上做交集
1、三个向量之间的交集,如果直接像两个向量一样使用,会得到这样的提示:
> intersect(a,b,c)
错误于intersect(a, b, c) : 参数没有用(c)
>intersect(x=c(1:5),y=c(3:8),z=c(2:6))
Error in intersect(x = c(1:5), y = c(3:8), z = c(2:6)) :
参数没有用(z = c(2:6))
|
|
2、解决方法一:
> intersect(intersect(a,b),c)
>intersect(intersect(x=c(1:5),y=c(3:8)),c(2:6))
[1] 3 4 5
|
|
|
3、解决方法二:
目前没有直接求多个集合交或并运算的函数.
如果集合数量比较少, 先求a与b的交集,然后赋值给某个向量,然后再求这个向量与c的交:
>z=intersect(a,b)
>z=intersect(z,c)
迭代形式.
但如果所求集合较多,建议使用循环建构求解。
> bio=intersect(x=c(1:5),y=c(3:8))
> biowolf=intersect(bio,c(2:6))
> biowolf
[1] 3 4 5
|
|
(责任编辑:乐老师)
|