在 `data.table[i` 中将整数视为键值而不是行索引

treat integers as key values rather than row indexes in `data.table[i`

我有一个 data.table,其中 key 字段包含整数值:

mydt1 <- data.table(keycol1=10:20, col1=letters[10:20], key='keycol1')

现在我想select根据这些值记录:

myIDs <- c(11, 15, 19)

但我不能只将这些值作为 [i - 它们将被视为行索引:

mydt1[myIDs,] # it will try to query rows 11, 15, 19
#   keycol1 col1
#1:      20    t
#2:      NA   NA
#3:      NA   NA

目前,我使用将全部转换为 character:

的解决方法
myIDs <- as.character(myIDs)
mydt1$keycol1 <- as.character(mydt1$keycol1)
setkey(mydt1, keycol1)
mydt1[myIDs,] # this works as expected

这样做的正确方法是什么?

我想这就是你要的

> mydt1[ keycol1 %in% myIDs ]   # also succeeds with mydt1[ keycol1 %in% myIDs , ]
   keycol1 col1
1:      11    k
2:      15    o
3:      19    s

只需进行二进制连接,因为您已经设置了 key

mydt1[.(myIDs)]
#    keycol1 col1
# 1:      11    k
# 2:      15    o
# 3:      19    s

P.S.

刚刚看到@Aruns 的评论,所以正如他所说,你一定要阅读this