你可以使用基础R中的intersect()函数来寻找两个对象的交集。
这个 "交集 "简单地表示两个对象有共同的元素。
这个函数使用以下基本语法。
intersect(object1, object2)
下面的例子展示了如何在向量和数据框中使用**intersect()**函数。
例1:在向量中使用intersect()函数
下面的代码显示了如何使用**intersect()**函数来寻找R中两个向量的交点。
#define two vectors
x <- c(1, 4, 5, 5, 9, 12, 19)
y <- c(1, 2, 5, 5, 10, 14, 19)
#find intersection between two vectors
intersect(x, y)
[1] 1 5 19
从输出中我们可以看到,向量x和y有三个共同的值:1、5和19。
请注意,intersect()函数也适用于字符向量。
#define two vectors
x <- c('A', 'B', 'C', 'D', 'E')
y <- c('C', 'D', 'E', 'F')
#find intersection between two vectors
intersect(x, y)
[1] "C" "D" "E"
从输出中我们可以看到,向量x和y有三个共同的字符串:C、D和E。
请注意,两个向量的长度不一定相同,intersect()函数也可以工作。
例2:在数据框架中使用intersect()函数
为了找到两个数据框架的共同行,我们必须使用dplyr包中的intersect()函数。
下面的代码显示了如何使用这个函数来找到两个数据框架的共同行。
library(dplyr)
#define two data frames
df1 <- data.frame(team=c('A', 'A', 'B', 'B'),
points=c(12, 20, 25, 19))
df1
team points
1 A 12
2 A 20
3 B 25
4 B 19
df2 <- data.frame(team=c('A', 'A', 'B', 'C'),
points=c(12, 22, 25, 32))
df2
team points
1 A 12
2 A 22
3 B 25
4 C 32
#find intersection between two data frames
dplyr::intersect(df1, df2)
team points
1 A 12
2 B 25
从输出结果中我们可以看到,这两个数据框有两行是共同的。
请注意,这个intersect()函数只会返回两个数据框架之间每一列都有相同数值的行。
还需要注意的是,我们可以将length()函数与intersect()函数一起使用,以简单地找到两个数据框有共同的行数。
#find number of rows in common between the two data frames
length(dplyr::intersect(df1, df2))
[1] 2
从输出结果中我们可以看到,两个数据框有2行的共同点。
其他资源
下面的教程解释了如何使用R中的其他常用函数。