【发布时间】:2018-04-03 12:27:54
【问题描述】:
给出如下代码。
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 上运行良好,但出现了错误
逻辑错误。 i 不是 data.table,但提供了 'on' 参数。
什么时候F2?
为什么?如何解决?
我要做的不是子集(或分组),而是使用“on”命令提高计算效率,我被告知是二级索引的关键字。 非常感谢。
我知道我在哪里犯了错误。简单地说,我以错误的方式使用它。 当给出“on”命令时,i 始终是一个 data.table。
我最初的目的是高效搜索目标。
条件:V3>=3,V2==2 目标:最大(V1)
我不能通过 i 一个条件,但我可以使 i 成为一个 data.table,如下所示。
F2 <- dt[V3>=3][V2==2,max(V1), on = "V4"]
完美运行! 谢谢大家。
【问题讨论】:
-
on用于加入data.tables 时。你想达到什么目的?你的意思是by? -
i是[.data.table的第一个(技术上是第二个)参数。您将V2==2 & V3>=3传递给i,这是一个逻辑向量而不是data.table。 -
@clemens 谢谢。我的样本具有误导性。让我解决它。
-
@Roland 我想我明白了你所说的。 “on”命令是为了提高对以i为首的新data.table进行分组时的效率,我使用i作为搜索条件。当然它出错了,只是因为我没有按应有的方式使用它。现在我的问题是如何提高效率?如果我有 4000 万行。
标签: r data.table