web-dev-qa-db-ja.com

複数のdata.tablesをマージする

2つの_data.table_をmerge関数または_[.data.table_関数とマージ(結合)できることを知っています。しかし、私が10と言った場合、_data.table_ sを使用して_do.call_を使用してそれらをすべてマージするには、これを行う関数がありますか?現在私はdo.call(cbind, ...)に頼っていますが、これは非常に特殊なケースでのみ機能します。

38
Alex

確かではありませんが、多分(試されていない):

Reduce(merge,list(DT1,DT2,DT3,...))
48
Matt Dowle

コメントで@Henkによって提案されたソリューションを具体化するために、これを使用して簡潔な定式化でall = TRUEオプションを選択する方法を次に示します。

MergedDT = Reduce(function(...) merge(..., all = TRUE), List_of_DTs)
23

Data.tableの最新バージョン(1.10.5)には、テーブル結合の簡単な構文があり、連鎖させることもできます。

 set(DT1, key)
 set(DT2, key) 
  ...
 set(DT10, key)

 DT_cmb <- DT1[DT2,][DT3,]...[DT10,]
7
HappyCoding