【发布时间】:2013-10-28 11:07:16
【问题描述】:
我正在尝试更改 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 中更改此类值的最佳(最快)方法是什么?
谢谢。
【问题讨论】:
-
这是因为隐藏了
by-without-by;最终by-without-by将被明确(并且可修改),因此这个问题将消失 - FR #2696;现在我认为沃尔夫冈的答案是正确的(哦,没有意识到你是沃尔夫冈:)) -
您的矢量扫描看起来非常脆弱。如果您看到一对 (4,1) 或者您在 (1,1) 之前看到 (4,4) 会发生什么?
-
@Frank,同意。这就是为什么我想要一些更好的解决方案:)
-
酷酷。我以为你只是在寻找加速。
标签: r data.table