我在表中有一些数据,我想做一个非等值连接(我认为是正确的术语),并针对不同的组按不同的范围过滤它。在下面的示例中,我想过滤组“a”,使其仅返回 1 到 20(含)之间的值,组“b”,因此它仅返回 80 到 100(含)之间的值。我的阅读表明这inrange应该是要使用的项目。我知道如何在一般情况下使用它,但我不确定如何让它在不同的范围内按组运行。(示例代码改编自?inrange)
创建样本数据
set.seed(1234)
Y = data.table(a=sample(1:100,100), val=runif(100), group=c(rep("a",50),rep("b",50)))
range = data.table(group=c("a","b"),start = c(1,80), end = c(20,100))
尝试过滤
Y[inrange(a, range$start, range$end),,by=group]
这显然不起作用,而是将这些范围应用于整个数据集并引发错误消息Ignoring by= because j= is not supplied。我认为我很清楚这不起作用,因为我没有在范围表和 Y 之间创建“连接”,但我没有看到如何使这两个表通过inrange.
注意:实际上 a 中的值将是 posixct 日期时间,但为了简单起见,我在这里没有使用它。