在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
他们看起来和我一样。有人可以解释为什么存在这两种操作吗?
答案 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
中的最小标量值,比如cmin
和b
bmax
中最大的标量值,形成范围{{ 1}},然后针对[cmin, bmax]
列中的每一行检查a
是否位于此范围[cmin, bmax]
内。