ドキュメントのロジックを理解しようとしてdata.tableいますが、少し不明確です。これを試して何が起こるかを確認できることはわかっていますが、病的なケースがないことを確認したいので、ロジックが実際にどのようにコーディングされたかを知りたいです。2 つのdata.tableオブジェクトのキー列の数が異なる場合 (たとえば、ahas 2 とbhas 3)、 を実行c <- a[b]するaとb、最初の 2 つのキー列で単純にマージされるか、または の 3 番目の列が の 3 番目のキー列に自動的にマージされます。b? 例:
require(data.table)
a <- data.table(id=1:10, t=1:20, v=1:40, key=c("id", "t"))
b <- data.table(id=1:10, v2=1:20, key="id")
c <- a[b]
これにより、 のキー列にa一致する の行が選択されます。たとえば、 の場合、 に2行と に 4 行があり、 に8 行を生成する必要があります。これは実際に起こっているようです:idbid==1bbac
> head(c,10)
id t v v2
1: 1 1 1 1
2: 1 1 21 1
3: 1 11 11 1
4: 1 11 31 1
5: 1 1 1 11
6: 1 1 21 11
7: 1 11 11 11
8: 1 11 31 11
9: 2 2 2 2
10: 2 2 22 2
それを試す他の方法は、次のことです。
d <-b[a]
これは同じことを行う必要があります。その中のすべての行に対して、a一致する行を選択する必要がありbます。これは事実のようです:atid
> head(d,10)
id v2 t v
1: 1 1 1 1
2: 1 11 1 1
3: 1 1 1 21
4: 1 11 1 21
5: 1 1 11 11
6: 1 11 11 11
7: 1 1 11 31
8: 1 11 11 31
9: 2 2 2 2
10: 2 12 2 2
誰か確認できますか?a明確にするために: は、いずれかのマージで使用された 3 番目のキー列であるか、2 つのテーブルのdata.tableのみを使用します。min(length(key(DT)))