鉴于以下代码。
library(data.table)
dt <- data.table(V1=round(runif(9,100,999),2), V2=rep(1:3,3),
V3=round(runif(9,10,99),2), V4=rep(letters[1:3],3))
setindex(dt,V4)
F1 <- dt[V2==2 & V3>=3, max(V1)]
F2 <- dt[V2==2 & V3>=3, max(V1), on = "V4"]
我100%确定class(dt)
是“data.table,data.frame”
它与F1运行良好,但出现了错误
逻辑错误。我不是data.table,但提供了'on'参数。
当F2?
为什么呢?怎么解决?
我要做的不是子集化(或分组),而是使用“on”命令提高计算效率,我被告知是二级索引的关键字。 非常感谢。
我知道我犯了什么错误。简单来说,我正在以错误的方式使用它。 当给出“on”命令时,我总是一个data.table。
我最初的目的是有效地搜索目标。
条件:V3&gt; = 3,V2 == 2 target:max(V1)
我不能通过我的条件,但我可以使我成为一个data.table如下。
F2 <- dt[V3>=3][V2==2,max(V1), on = "V4"]
它完美运行! 谢谢你们。
答案 0 :(得分:1)
您没有使用正确的子集语法。您必须在名为V2
或V3
的工作空间中包含一些对象。 data.table
认为你正在合并他们。 i
参数是[.data.table
的第一个参数。将V2==2 & V3>=3
替换为(V2==2 & V3>=3)
以引用列变量。有关i=
作为[.data.table
中子集的范围界定的细微差别,请参阅here。最后一个on
可能应该是by
(尽管由于子集语法,您仍会遇到错误)。