data.table 中的 Between 与 inrange

7 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
Run Code Online (Sandbox Code Playgroud)

它们在我看来是一样的。有人可以解释一下为什么存在这两种操作吗?

小智 7

> X
   a  b c
1: 1  6 5
2: 2  7 4
3: 3  8 3
4: 4  9 2
5: 5 10 1
Run Code Online (Sandbox Code Playgroud)

使用评论中的示例:

> 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
Run Code Online (Sandbox Code Playgroud)

它似乎between单独查看每一行并检查 a 中的值是否使得该行的 c <= a <= b 。

inrange查找 中的最小标量值c(例如)cmin和 , 中的最大标量值bbmax形成一个范围[cmin, bmax],然后检查列中的每一行是否a位于该范围内。[cmin, bmax]a

  • 这是不正确的 - `inrange` 检查一个值是否在提供的范围的并集中(在上面的示例中,`[cmin, bmax]` 恰好是并集,但情况不一定如此) (5认同)
  • @sirallen,请提供一个示例或对问题的不同答案,以便我们都能理解。仅仅说这是不正确的,这种情况并不总是发生,然后什么都不说并没有多大帮助。 (2认同)