2016-10-17 3 views
0

私はすべての列で結合したい2つのテーブルA1とA2を持っています(目的は変更の追跡に使用できる関数を持つことですデータ)。明示的に指定することなくすべての列を簡単に結合する方法はありますか?R data.table - 列名を指定せずにすべての列を結合する簡単な方法

A1[A2, on="ALL"]

ような何か、誰もがいくつかのコード例を必要とする場合、私はそれを提供することができますに、しかし問題は、私はdata.tableのヘルプセクションで何かを見逃している場合について、より一般的です。

私はdata.tableソリューションを探しています。何も存在しない場合、私はdplyrのを使用します:

inner_join(A1, A2, by = NULL) 
+0

'mget(intersect(names(A1)、names(A2)))'のようなものを使用できますか? –

答えて

2

私はデータテーブルにこれを行う方法は以下であることを考える:

require(data.table) 
dt1 <- data.table(A1 = c(1,2,3), A2 = c("A", "B", "D")) 
dt2 <- data.table(A1 = c(3,2,3), A2 = c("A", "B", "C")) 

setkeyv(dt1, names(dt1)) 
setkeyv(dt2, names(dt2)) 

と内側はすべて共通の列に参加しています:

dt1[dt2, nomatch = 0] 

その他のオプションは、次の(コメントでフランクにクレジット)が含ま

dt1[dt2, on=names(dt2), nomatch = 0

これは、データテーブルをキーする必要がないという利点があります。 (詳細はここで見つけることができる:What is the purpose of setting a key in data.table?)データを用いて


別のオプションは、(バージョン1.9.7以降で利用可能)操作を設定:

fintersect(dt1, dt2) 
+1

Thx - それはトリックでした! – ErrantBard

+3

最近、設定キーの代わりに 'on ='を使うことをお勧めします:http://stackoverflow.com/a/20057411/ so 'dt1 [dt2、on = names(dt2)、nomatch = 0]'。また、現在のdevelバージョンではデータセットの演算子が設定されているので、 'fintersect(dt1、dt2)'はオプションになりました。 – Frank

+1

わからなかった!ありがとうございます。私は心に留めてありがとうございます:)(そしてあなたが気にしないなら、答えにそれを加えてください) – User2321

0

与えられた例を使用して、別のオプションであります'dplyr'パッケージ。

library(dplyr) 
df1 <- data.frame(A1 = c(1,2,3), A2 = c("A", "B", "D")) 
df2 <- data.frame(A1 = c(3,2,3), A2 = c("A", "B", "C")) 

inner_join(df1, df2) 
+1

申し訳ありませんが、私はタイトルの 'data.table'を読んでいませんでしたが... ;-)、dplyrはdata.tableのために働きますs)) – sluedtke

+0

いいえ問題ありません - 私はちょうどdtソリューションがなかった場合は、それを使用する予定でした:) – ErrantBard

関連する問題