R语言中交集,并集,补集,差集的方法:向量和数据框

交集、并集、补集、差集,这些在R语言中如何实现呢,这篇博客介绍一下。

首先,模拟一下数据:a为1-10的数,b为5-15的数。

这里,推荐dplyr中的函数,

library(dplyr)
a = 1:10
b = 5:15

a
b

1. 向量

1. 1 交集(intersect)

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

# 交集
intersect(a,b)

1.2 交集(union)

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

在这里插入图片描述

# 并集
union(a,b)

1.3 补集

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

# 补集
setdiff(a,b)
setdiff(b,a)

a与b的补集:

b与a的补集:

2. 数据框

构建两个数据框:

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 交集

inner_join(d1,d2,by="ID")

2.2 并集

full_join(d1,d2,by="ID")

2.3 以d1为准合并

left_join(d1,d2,by="ID")

2.4 以d2为准合并

right_join(d1,d2,by="ID")

2.5 在d1中去除d2的ID

anti_join(d1,d2,by="ID")

2.6 在d1中提取d2的ID

semi_join(d1,d2,by="ID")

3. 测试数据及代码

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")



  • 8
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
假设集合 A 和 B 分别用数组 a 和 b 表示,数组长度分别为 n 和 m。下面是 C 语言求解两个集合的交集并集差集和环集的代码示例: 1. 交集 交集是指包含在集合 A 和集合 B 的相同元素。可以通过遍历 a 和 b 数组,将它们相同的元素添加到结果数组即可。 ``` int result[100]; int count = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i] == b[j]) { result[count++] = a[i]; break; } } } // 输出结果数组 for (int i = 0; i < count; i++) { printf("%d ", result[i]); } ``` 2. 并集 并集是指包含在集合 A 或集合 B 的所有元素。可以将 a 和 b 数组的元素全部添加到结果数组,最后去重即可。 ``` int result[200]; int count = 0; // 将 a 数组的元素添加到结果数组 for (int i = 0; i < n; i++) { result[count++] = a[i]; } // 将 b 数组的元素添加到结果数组 for (int i = 0; i < m; i++) { result[count++] = b[i]; } // 去重 for (int i = 0; i < count; i++) { for (int j = i + 1; j < count; j++) { if (result[i] == result[j]) { // 将重复的元素删除 for (int k = j; k < count - 1; k++) { result[k] = result[k + 1]; } count--; j--; } } } // 输出结果数组 for (int i = 0; i < count; i++) { printf("%d ", result[i]); } ``` 3. 差集 差集是指包含在集合 A 但不在集合 B 的元素。可以遍历 a 数组,将不在 b 数组的元素添加到结果数组。 ``` int result[100]; int count = 0; for (int i = 0; i < n; i++) { int flag = 1; for (int j = 0; j < m; j++) { if (a[i] == b[j]) { flag = 0; break; } } if (flag == 1) { result[count++] = a[i]; } } // 输出结果数组 for (int i = 0; i < count; i++) { printf("%d ", result[i]); } ``` 4. 环集 环集是指同时属于集合 A 和集合 B 的元素。可以遍历 a 数组,将同时存在于 a 和 b 数组的元素添加到结果数组。 ``` int result[100]; int count = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i] == b[j]) { result[count++] = a[i]; break; } } } // 输出结果数组 for (int i = 0; i < count; i++) { printf("%d ", result[i]); } ``` 以上就是 C 语言求解两个集合的交集并集差集和环集的代码示例,希望能够对您有所帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值