我正在尝试更改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)]
有人能指出为什么会出现这种情况吗?
还有什么是在大型data.table中更改这样的值的最佳(最快)方法?
谢谢 .
3 回答
这有用吗?
如果是这样,它远比你的矢量扫描好,而不仅仅是因为速度 . 矢量扫描看起来非常脆弱 . 有了它,如果你看到一对(4,1)或在(1,1)之前看到(4,4)会发生什么?
请注意不同的结果
因此,为了使用二进制搜索,您必须选择“关闭”列
但是,assignement在复合查询中不起作用 .
受到影子答案的启发,我找到了一种似乎有效的“非复合”方式 . 首先使用二进制搜索获取行号,然后使用找到的行号更新data.table .
有什么更好的想法快速更新?