如何选择不在R中其他数据框中的数据框中的行?
有时,我们需要查找两个数据帧之间的不常见行,而不是查找共同行。当我们期望大量行而不是少数行时,通常使用它。我们可以通过使用带有子集功能的感叹号表示的取反运算符来实现此目的。
示例
请看以下数据帧-
> 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)
类似地,获取不在df1的x1中的df2变量y2的子集,则可以如下进行操作-
> 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