在data.table的i中使用match

詹斯

%in%操作者为所述匹配函数返回“相同的长度为x的向量”的包装。例如:

> match(c("a", "b", "c"), c("a", "a"), nomatch = 0) > 0
## [1]  TRUE FALSE FALSE

当在idata.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.tableV <1.9.5自动索引中的错误,已在V> = 1.9.5中修复。

我可以想到3种可能的解决方法:

  1. 禁用自动索引并%in%像下面那样使用base R

    options(datatable.auto.index = FALSE)
    dt1[v1 %in% dt2$v1]
    ##    v1  v2
    ## 1:  a dt1
    
  2. 使用%chin%既更高效又没有此错误的内置运算符(仅适用于字符向量比较)

    dt1[v1 %chin% dt2$v1]
    ##    v1  v2
    ## 1:  a dt1
    
  3. 从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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章