R语言中交集,并集,补集,差集的方法汇总

2022-07-27 19:46:09 浏览数 (2)

交集、并集、补集、差集,这些在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「示例图:黄色线的区域,就是目标区域」

代码语言:javascript复制
# 交集
intersect(a,b)

1.2 交集(union)

R中的函数为:union「示例图:黄色线的区域,就是目标区域」

在这里插入图片描述

代码语言:javascript复制
# 并集
union(a,b)

1.3 补集

R中的函数为:setdiff「示例图:黄色线的区域,就是目标区域」

代码语言:javascript复制
# 补集
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")

0 人点赞