数据表因子的%%运算符行为?

nsy*_*mms 3 r data.table

我似乎无法让%in%运算符表现为数据表因子列.我知道我可能错过了一些数据表的秘密语法,但是我找不到它......我已经搜遍了所有.

这是一个很好的例子来说明我的痛苦.当然,简单的答案是使用数据框,但我有一个大数据集,可以从数据表的某些功能中受益.

> a <- data.table(c1=factor(c(1,2,3)))
> a
   c1
1:  1
2:  2
3:  3

> '2' %in% a[,1,with=F]
[1] FALSE

> 2 %in% a[,1,with=F]
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

它的工作方式与我期望的数据帧一样......

> b <- data.frame(c1=factor(c(1,2,3)))
> '2' %in% b[,1]
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

任何帮助赞赏....

Rol*_*and 6

a[,1,with=F]是一个data.table而不是像vector这样的b[,1].这是记录在案的.

data.table是一个列表,help("%in%")表示"列表转换为字符向量".所以,我猜这种情况会发生(但它隐藏在C源代码中match):

as.character(a[,1,with=F])
#[1] "1:3"
Run Code Online (Sandbox Code Playgroud)

您可以使用[[以下方法有效地选择data.table列:

'2' %in% a[[1]]
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)