在 `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
我有一个 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