如何在 R 中选择一个数据框中不存在于其他数据框中的行?

r programmingserver side programmingprogramming更新于 2025/6/27 6:07:17

有时,我们需要查找两个数据框之间不常见的行,而不是查找相同的行。这种方法主要用于我们预期有大量行而不是少数行不常见的情况。我们可以通过使用否定运算符(感叹号表示)和子集函数来实现这一点。

示例

考虑以下数据框 −

> x1<-sample(1:10,20,replace=TRUE)
> y1<-sample(1:10,20,replace=TRUE)
> df1<-data.frame(x1,y1)
> df1

输出

 x1 y1
1 10 6
2 5 9
3 10 10
4 4 10
5 1 6
6 1 4
7 9 3
8 5 10
9 10 3
10 8 2
11 6 10
12 6 3
13 9 3
14 3 6
15 6 9
16 9 1
17 7 9
18 3 8
19 2 5
20 4 9

示例

> x2<-sample(1:10,20,replace=TRUE)
> y2<-sample(1:10,20,replace=TRUE)
> df2<-data.frame(x2,y2)
> df2

输出

 x2 y2
1 6 10
2 3 6
3 9 6
4 9 10
5 10 10
6 3 2
7 3 3
8 2 9
9 7 5
10 1 1
11 10 10
12 1 6
13 3 4
14 4 2
15 6 3
16 1 7
17 2 2
18 4 6
19 4 1
20 1 8

现在假设我们想要取 df2 变量 y2 的一个子集,该子集不在 df1 的 y1 中,那么可以按如下方式进行 −

> subset(df2,!(y2%in%df1$y1))
x2 y2
16 1 7
<0 rows> (or 0-length row.names)

类似地,取 df2 变量 y2 的一个子集,该子集不在 df1 的 x1 中,则可以按如下方式进行 −

> subset(df2,!(y2%in%df1$x1))
[1] x2 y2
<0 rows> (or 0-length row.names)

我们再看一个例子 −

示例

> x1<-rep(1:10,2)
> df1<-data.frame(x1)
> df1

输出

 x1
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 1
12 2
13 3
14 4
15 5
16 6
17 7
18 8
19 9
20 10
> x2<-rep(1:5,4)
> df2<-data.frame(x2)
> df2

输出

 x2
1 1
2 2
3 3
4 4
5 5
6 1
7 2
8 3
9 4
10 5
11 1
12 2
13 3
14 4
15 5
16 1
17 2
18 3
19 4
20 5
> subset(df1,!(x1%in%df2$x2))

输出

 x1
6 6
7 7
8 8
9 9
10 10
16 6
17 7
18 8
19 9
20 10

相关文章