30

data.tableFAQでは、パラメーターnomatch = NAは外部結合に似ていると言われています。ただし、完全なdata.table外部結合を実行することはできませんでした。右外部結合のみです。

例えば:

a <- data.table("dog" = c(8:12), "cat" = c(15:19))

   dog cat
1:   8  15
2:   9  16
3:  10  17
4:  11  18
5:  12  19

b <- data.table("dog" = 1:10, "bullfrog" = 11:20)

    dog bullfrog
 1:   1       11
 2:   2       12
 3:   3       13
 4:   4       14
 5:   5       15
 6:   6       16
 7:   7       17
 8:   8       18
 9:   9       19
10:  10       20

setkey(a, dog)
setkey(b, dog)

a[b, nomatch = NA]

    dog cat bullfrog
 1:   1  NA       11
 2:   2  NA       12
 3:   3  NA       13
 4:   4  NA       14
 5:   5  NA       15
 6:   6  NA       16
 7:   7  NA       17
 8:   8  15       18
 9:   9  16       19
10:  10  17       20

そのため、nomatch = NA右外部結合が生成されます (これがデフォルトです)。完全結合が必要な場合はどうすればよいですか? 例えば:

merge(a, b, by = "dog", all = TRUE) 
# Or with plyr:
join(a, b, by = "dog", type = "full")

    dog cat bullfrog
 1:   1  NA       11
 2:   2  NA       12
 3:   3  NA       13
 4:   4  NA       14
 5:   5  NA       15
 6:   6  NA       16
 7:   7  NA       17
 8:   8  15       18
 9:   9  16       19
10:  10  17       20
11:  11  18       NA
12:  12  19       NA

それは可能data.tableですか?

4

2 に答える 2

33

あなたは実際にそれを持っています。merge.data.tableあなたが電話をかけるときにあなたがしていることとまったく同じものを使用 してください

merge(a, b, by = "dog", all = TRUE)

aあるためdata.table、 を merge(a, b, ...)呼び出しますmerge.data.table(a, b, ...)

于 2013-03-02T05:06:17.283 に答える