该%in%
操作者为所述匹配函数返回“相同的长度为x的向量”的包装。例如:
> match(c("a", "b", "c"), c("a", "a"), nomatch = 0) > 0
## [1] TRUE FALSE FALSE
当在i
data.table中使用时
(dt1 <- data.table(v1 = c("a", "b", "c"), v2 = "dt1"))
v1 v2
1: a dt1
2: b dt1
3: c dt1
(dt2 <- data.table(v1 = c("a", "a"), v2 = "dt2"))
v1 v2
1: a dt2
2: a dt2
dt1[v1 %in% dt2$v1]
v1 v2
1: a dt1
2: a dt1
获得重复项。应的预期行为%in%
中i
的data.table没有给出结果作为同
dt1[dt1$v1 %in% dt2$v1]
v1 v2
1: a dt1
即没有重复?
这是data.table
V <1.9.5自动索引中的错误,已在V> = 1.9.5中修复。
我可以想到3种可能的解决方法:
禁用自动索引并%in%
像下面那样使用base R
options(datatable.auto.index = FALSE)
dt1[v1 %in% dt2$v1]
## v1 v2
## 1: a dt1
使用%chin%
既更高效又没有此错误的内置运算符(仅适用于字符向量比较)
dt1[v1 %chin% dt2$v1]
## v1 v2
## 1: a dt1
从Github安装开发版本(首先关闭所有R会话,然后仅重新打开一个)
library(devtools)
install_github("Rdatatable/data.table", build_vignettes = FALSE)
library(data.table)
dt1 <- data.table(v1 = c("a", "b", "c"), v2 = "dt1")
dt2 <- data.table(v1 = c("a", "a"), v2 = "dt2")
dt1[v1 %in% dt2$v1]
## v1 v2
## 1: a dt1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句