2017-03-06 32 views
2

在R的data.table中,何時應該在%between%%inrange%之間進行子集操作?我已閱讀?between的幫助頁面,對於這些差異,我仍然摸不着頭腦。vs data intable中的in inrange

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

'X [b%inrange%list(lower = c(6,9),upper = c(7,10))]' - Kristoferson說的例子。 – Frank

+3

比較'X [%%列表(c,b)]'與'X [a%inrange%list(c,b)]''之間的差異,然後再次閱讀文檔。 –

回答

1
> 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 < =一個< = B爲行。

inrange會在c最小的標量值,說cminb最大的標量值,bmax,形成了一系列[cmin, bmax],然後檢查是否a位於此範圍內[cmin, bmax],每一行的a柱。

+0

這是不正確的 - 'inrange'檢查一個值是否在所提供的範圍的聯合中(在上面的示例中,'[cmin,bmax]'恰好是聯合,但不一定是這種情況) – sirallen