在data.table中的vs inrange之间

时间:2017-03-06 18:33:21

标签: r data.table

在R data.table中,何时应该在%between%%inrange%之间选择子集操作?我已经阅读了?between的帮助页面,我仍然对这些差异感到头疼。

library(data.table)
X = data.table(a=1:5, b=6:10, c=c(5:1))


> X[b %between% c(7,9)]
   a b c
1: 2 7 4
2: 3 8 3
3: 4 9 2
> X[b %inrange% c(7,9)]
   a b c
1: 2 7 4
2: 3 8 3
3: 4 9 2

他们看起来和我一样。有人可以解释为什么存在这两种操作吗?

1 个答案:

答案 0 :(得分:2)

> X
   a  b c
1: 1  6 5
2: 2  7 4
3: 3  8 3
4: 4  9 2
5: 5 10 1

使用评论中的示例:

> X[a %between% list(c, b)]
   a  b c
1: 3  8 3
2: 4  9 2
3: 5 10 1
> X[a %inrange% list(c, b)]
   a  b c
1: 1  6 5
2: 2  7 4
3: 3  8 3
4: 4  9 2
5: 5 10 1

似乎between分别查看每一行并检查a中的值是否为该行的c< = a< = b。

inrange查找c中的最小标量值,比如cminb bmax中最大的标量值,形成范围{{ 1}},然后针对[cmin, bmax]列中的每一行检查a是否位于此范围[cmin, bmax]内。