не соединяется с data.tables

У меня есть вопрос по идиоме data.table для «не-объединений», вдохновленный вопросом Iterator . Вот пример:

library(data.table)

dt1 <- data.table(A1=letters[1:10], B1=sample(1:5,10, replace=TRUE))
dt2 <- data.table(A2=letters[c(1:5, 11:15)], B2=sample(1:5,10, replace=TRUE))

setkey(dt1, A1)
setkey(dt2, A2)

Данные .table выглядят так

> dt1               > dt2
      A1 B1               A2 B2
 [1,]  a  1          [1,]  a  2
 [2,]  b  4          [2,]  b  5
 [3,]  c  2          [3,]  c  2
 [4,]  d  5          [4,]  d  1
 [5,]  e  1          [5,]  e  1
 [6,]  f  2          [6,]  k  5
 [7,]  g  3          [7,]  l  2
 [8,]  h  3          [8,]  m  4
 [9,]  i  2          [9,]  n  1
[10,]  j  4         [10,]  o  1

Чтобы определить, какие строки в dt2 имеют одинаковый ключ в dt1 , установите для параметра which значение TRUE :

> dt1[dt2, which=TRUE]
[1]  1  2  3  4  5 NA NA NA NA NA

Мэтью предложил в этом ответе использовать идиому «не присоединяться»

dt1[-dt1[dt2, which=TRUE]]

к подмножеству dt1 к этим строкам t у них есть индексы, которых нет в dt2 . На моем компьютере с data.table v1.7.1 я получаю сообщение об ошибке:

Error in `[.default`(x[[s]], irows): only 0's may be mixed with negative subscripts

Вместо этого с параметром nomatch = 0 работает «без соединения»

> dt1[-dt1[dt2, which=TRUE, nomatch=0]]
     A1 B1
[1,]  f  2
[2,]  g  3
[3,]  h  3
[4,]  i  2
[5,]  j  4

Это предполагаемое поведение?

14
задан Community 23 May 2017 в 12:15
поделиться