如何在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)
類似地,獲取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
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP