How do I do a negative / nomatch / inverse search in data.table?

前端 未结 2 708
囚心锁ツ
囚心锁ツ 2020-12-29 06:00

What happens if I want to select all the rows in a data.table that do not contain a particular value in the key variable using binary search? By the way, what is the correct

2条回答
  •  离开以前
    2020-12-29 06:43

    The idiom is this:

    DT[-DT["a", which=TRUE]]
    
       x y v
    1: b 1 4
    2: b 3 5
    3: b 6 6
    4: c 1 7
    5: c 3 8
    6: c 6 9
    

    Inspiration from:

    • The mailing list posting Return Select/Join that does NOT match?
    • The previous question non-joins with data.tables
    • Matthew Dowle's answer to Porting set operations from R's data frames to data tables: How to identify duplicated rows?

    Update. New in v1.8.3 is not-join syntax. Farrel's first expectation (! rather than -) has been implemented :

    DT[-DT["a",which=TRUE,nomatch=0],...]   # old idiom
    DT[!"a",...]                            # same result, now preferred.
    

    See the NEWS item for more detailed info and example.

提交回复
热议问题