r %in% 数据 table 因素的操作员行为?
r %in% operator behavior for data table factors?
我似乎无法让 %in% 运算符对数据 table 因子列起作用。我知道我可能遗漏了一些数据 tables 的秘密语法,但我找不到它...我已经搜索过了。
这里有一个小例子可以说明我的痛苦。当然,简单的答案是使用数据框,但我有一个大型数据集,它受益于数据 tables.
的某些特征
> 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
它的工作方式和我对数据帧的预期一样...
> b <- data.frame(c1=factor(c(1,2,3)))
> '2' %in% b[,1]
[1] TRUE
感谢任何帮助....
a[,1,with=F]
是 data.table 而不是像 b[,1]
这样的向量。这是记录在案的。
A data.table 是一个列表,help("%in%")
表示 "lists are converted to character vectors"。所以,我猜会发生这种情况(但它隐藏在 match
的 C 源代码中):
as.character(a[,1,with=F])
#[1] "1:3"
您可以 select data.table 列有效地使用 [[
:
'2' %in% a[[1]]
#[1] TRUE
我似乎无法让 %in% 运算符对数据 table 因子列起作用。我知道我可能遗漏了一些数据 tables 的秘密语法,但我找不到它...我已经搜索过了。
这里有一个小例子可以说明我的痛苦。当然,简单的答案是使用数据框,但我有一个大型数据集,它受益于数据 tables.
的某些特征> 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
它的工作方式和我对数据帧的预期一样...
> b <- data.frame(c1=factor(c(1,2,3)))
> '2' %in% b[,1]
[1] TRUE
感谢任何帮助....
a[,1,with=F]
是 data.table 而不是像 b[,1]
这样的向量。这是记录在案的。
A data.table 是一个列表,help("%in%")
表示 "lists are converted to character vectors"。所以,我猜会发生这种情况(但它隐藏在 match
的 C 源代码中):
as.character(a[,1,with=F])
#[1] "1:3"
您可以 select data.table 列有效地使用 [[
:
'2' %in% a[[1]]
#[1] TRUE