交集、并集、补集、差集,这些在R语言中如何实现呢,这篇博客介绍一下。
首先,模拟一下数据:a为1-10的数,b为5-15的数。
这里,推荐dplyr中的函数,
代码语言:javascript复制library(dplyr)
a = 1:10
b = 5:15
a
b
1. 向量
1. 1 交集(intersect)
R中的函数为:intersect
「示例图:黄色线的区域,就是目标区域」
# 交集
intersect(a,b)
1.2 交集(union)
R中的函数为:union
「示例图:黄色线的区域,就是目标区域」
在这里插入图片描述
代码语言:javascript复制# 并集
union(a,b)
1.3 补集
R中的函数为:setdiff
「示例图:黄色线的区域,就是目标区域」
# 补集
setdiff(a,b)
setdiff(b,a)
a与b的补集:
b与a的补集:
2. 数据框
构建两个数据框:
代码语言:javascript复制set.seed(123)
d1 = data.frame(ID = 1:10,y1 = rnorm(10))
d2 = data.frame(ID = 5:15,y2 = rnorm(11))
d1
d2
2.1 交集
代码语言:javascript复制inner_join(d1,d2,by="ID")
2.2 并集
代码语言:javascript复制full_join(d1,d2,by="ID")
2.3 以d1为准合并
代码语言:javascript复制left_join(d1,d2,by="ID")
2.4 以d2为准合并
代码语言:javascript复制right_join(d1,d2,by="ID")
2.5 在d1中去除d2的ID
代码语言:javascript复制anti_join(d1,d2,by="ID")
2.6 在d1中提取d2的ID
代码语言:javascript复制semi_join(d1,d2,by="ID")
3. 测试数据及代码
代码语言:javascript复制a = 1:10
b = 5:15
a
b
# 交集
intersect(a,b)
# 并集
union(a,b)
# 补集
setdiff(a,b)
setdiff(b,a)
# 数据框
set.seed(123)
d1 = data.frame(ID = 1:10,y1 = rnorm(10))
d2 = data.frame(ID = 5:15,y2 = rnorm(11))
d1
d2
## 交集
inner_join(d1,d2,by="ID")
## 并集
full_join(d1,d2,by="ID")
## 以左边数据为准,进行合并
left_join(d1,d2,by="ID")
## 以右边边数据为准,进行合并
right_join(d1,d2,by="ID")
## 在d1中去除d2的ID
anti_join(d1,d2,by="ID")
## 在d1中提取d2的ID
semi_join(d1,d2,by="ID")