2013-12-13 8 views
4

我在R中創建data.table並設置一列作爲鍵。當我嘗試從數據表中檢索值時;對於沒有匹配的行,我會返回NA值。我通常不會在我的搜索中想要這種行爲。下面R數據錶行爲,同時過濾行

library(data.table) 
dt <- data.table('foo'=seq(10),bar=sample(letters,10)) 
setkey(dt,bar) 
dt[sample(letters,5)] 


> dt[sample(letters,5)] 
    b foo 
1: x 4 
2: q 2 
3: u 8 
4: s NA 
5: b NA 

回答

6

例如爲了除去NA行簡單地設定nomatch=0

下面是一個例子(I除去隨機採樣,以便每個人都可以具有相同的結果)

library(data.table) 
dt = data.table(foo = 1:10, bar = letters[1:10]) 
setkey(dt, bar) 
needed_letters = letters[c(1:8,11,12)] #1 - 8 are available, 11 and 12 are not 
dt[J(needed_letters),nomatch=0] 

添加從馬特

此外,如果你喜歡nomatch=0是th Ë默認情況下,您可以更改默認:

options(datatable.nomatch=0) 
dt[J(needed_letters)] # now, no NAs will be returned 

您可以檢查所有的參數是這樣的:

> args(data.table:::`[.data.table`) 

function (x, i, j, by, keyby, 
    with = TRUE, 
    nomatch = getOption("datatable.nomatch"), 
    mult = "all", 
    roll = FALSE, 
    rollends = if (roll=="nearest") c(TRUE,TRUE) 
       else if (roll>=0) c(FALSE, TRUE) 
       else c(TRUE,FALSE), 
    which = FALSE, 
    .SDcols, 
    verbose = getOption("datatable.verbose"), 
    allow.cartesian = getOption("datatable.allow.cartesian"), 
    drop = NULL) 

的參數通過getOption其默認因此可以有自己的默認變化。

+0

非常感謝馬特。 – Abhi