ドキュメントのロジックを理解しようとしてdata.table
いますが、少し不明確です。これを試して何が起こるかを確認できることはわかっていますが、病的なケースがないことを確認したいので、ロジックが実際にどのようにコーディングされたかを知りたいです。2 つのdata.table
オブジェクトのキー列の数が異なる場合 (たとえば、a
has 2 とb
has 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 行を生成する必要があります。これは実際に起こっているようです:id
b
id==1
b
b
a
c
> 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
ます。これは事実のようです:a
t
id
> 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)))