0 ## [1] -6ren">
gpt4 book ai didi

r - 在 data.table 的 i 中使用匹配

转载 作者:行者123 更新时间:2023-12-01 02:12:09 25 4
gpt4 key购买 nike

%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 种可能的解决方法:

  • 禁用自动索引并使用基数 R %in%
    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 session ,然后重新打开一个)
    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
  • 关于r - 在 data.table 的 i 中使用匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28411963/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com