为一行更改一行中的data.table值

Wol*_* Wu 5 r data.table

我正在尝试更改data.table中特定行的一列值.这在我进行矢量扫描时起作用,但在我进行二分查找时不起作用.

dtData <- data.table(TickerId = c(1,2,3,4,5), DateTime = c(1,2,3,4,5), Close =     c(100,200,300,400,500), key=c('TickerId', 'DateTime'))
dtQuery <- data.table(TickerId = c(1,4), DateTime = c(1,4))

#Binary search doesn't work - both changed rows now contain 101
dtData[dtQuery, Close:=c(101,401)]

#Vector scan works
dtData[TickerId %in% c(1,4) & DateTime %in% c(1,4), Close:=c(101,401)]
Run Code Online (Sandbox Code Playgroud)

有人能指出为什么会出现这种情况吗?

还有什么是在大型data.table中更改这样的值的最佳(最快)方法?

谢谢.

Fra*_*ank 4

这有效吗?

dtQuery[,newClose:=c(101,401)]
dtData[dtQuery,Close:=newClose]
Run Code Online (Sandbox Code Playgroud)

如果是这样,它比矢量扫描要好得多,而不仅仅是因为速度。矢量扫描看起来非常脆弱。有了它,如果您看到一对 (4,1) 或在 (1,1) 之前看到 (4,4),会发生什么情况?