2016-11-07 5 views
2

data.tableライブラリのみを使用して設定操作を行う必要があります。data.tableを使用して操作を設定する

私はに参加/マージ、操作を設定したくありません。したがって、キーごとに列を一致させるのではなく、異なるデータテーブルから行を追加します。

私たちは組み込みのデータセットから2つのサンプルを処理します。

問題の質問のすべては以下の通りです:

のみdata.tableを使用して
#install.packages("nycflights13") 
library(nycflights13) 

#install.packages("sqldf") 
library(sqldf) 

#install.packages("data.table") 
library(data.table) 

dt_airports <- data.table(airports) 

Adt <- dt_airports[1:10] 
Bdt <- dt_airports[6:15] 

sqldf('SELECT * FROM A INTERSECT SELECT * FROM B') 
# can I do it better using data.table? 
rbindlist(list(Adt,Bdt))[duplicated(rbindlist(list(Adt,Bdt))),] 

sqldf('SELECT * FROM A EXCEPT SELECT * FROM B') 
# how to do it using data.table? 

sqldf('SELECT * FROM B EXCEPT SELECT * FROM A') 
# how to do it using data.table? 
+0

可能な重複右)?](http://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right) – theArun

+0

いいえ、私はジョインティングをしたくないですが、 operetionsを設定します。したがって、キーごとに列を一致させるのではなく、異なるデータテーブルから行を追加します。 – AgnieszkaTomczyk

+1

特定の列に基づいて2つのデータテーブルをマージしています。あなたが求めている最初の行は交差であり、2番目の行はleft_join(私は考える)であり、3番目はrightです。 – theArun

答えて

1

:[どのように参加する(マージ)データ・フレーム(インナー、アウター、左、の

sqldf('SELECT * FROM A INTERSECT SELECT * FROM B') 
# data.table 
rbindlist(list(Adt,Bdt))[duplicated(rbindlist(list(Adt,Bdt))),] 
# better in data.table 
setkeyv(Adt,colnames(Adt)[1:7]) 
Adt[Bdt, nomatch=0L] 

sqldf('SELECT * FROM A EXCEPT SELECT * FROM B') 
# data.table 
setkeyv(Adt,colnames(Adt)[1:7]) 
Adt[!Bdt] 

sqldf('SELECT * FROM B EXCEPT SELECT * FROM A') 
# data.table 
setkeyv(Bdt,colnames(Bdt)[1:7]) 
Bdt[!Adt] 
関連する問題