【发布时间】:2015-05-14 01:00:55
【问题描述】:
有时,我有一个键控 data.table,我想根据它的键 和 一个未键控的列进行子集化。最简单/最快的方法是什么?
最自然的感觉是错误:
dt <- data.table(id = 1:100, var = rnorm(100), key = "id")
dt[.(seq(1, 100, 2)) & var > 0, ]
下一个最干净的事情是链:
dt[.(seq(1, 100, 2))][var > 0, ]
当然我们可以完全放弃使用二分搜索(我认为这显然是应该避免的):
dt[id %in% seq(1, 100, 2) & var > 0, ]
有没有我遗漏的方法?另外,为什么第一个是错误的任何特殊原因?语法对我来说似乎很清楚。
【问题讨论】:
-
我赌的是“干净”的链条。如果您的第二个条件是不等式,我怀疑当前的索引系统是否有帮助。现在有关于平等条件的“自动索引”,但我不确定细节。新闻中提到:github.com/Rdatatable/data.table 如果您需要对您的子集执行
by=.EACHI,我猜您将不得不切换链。dt[var>2][.(seq(1,100,2)),...do stuff...,by=.EACHI] -
见 cmets here
-
所以看起来答案真的取决于我想在
j中做什么,可以这么说吗?
标签: r data.table