R data.table筛选行时的行为
我正在R中创建一个data.table并设置一列作为键。当我试图从数据表中检索值时;对于不匹配的行,我将返回NA值。我通常不希望在搜索中出现这种行为。下面的例子R data.table筛选行时的行为,r,data.table,R,Data.table,我正在R中创建一个data.table并设置一列作为键。当我试图从数据表中检索值时;对于不匹配的行,我将返回NA值。我通常不希望在搜索中出现这种行为。下面的例子 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
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
库(data.table)
dt[样本(字母,5)]
比福
1:x4
2:q 2
3:u 8
4:s NA
5:b不适用
要删除NA
行,只需设置nomatch=0
:
下面是一个例子(我删除了随机抽样,这样每个人都可以得到相同的结果)
来自Matt的添加
此外,如果您希望默认值为nomatch=0
,则可以更改默认值:
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)
因此,默认值为viagetOption
的参数可以更改其默认值
> 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)