【问题标题】:Is there a dplyr::filter() parameter equivalent to nomatch option in data.table?是否有一个 dplyr::filter() 参数等效于 data.table 中的 nomatch 选项?
【发布时间】:2020-10-23 15:49:18
【问题描述】:

带有data.table

您可以选择nomatch=NA:

DT[c("A", "D"), on = "V4", nomatch = NA] #returns a row with "D" even if not found

或 nomatch=NULL(与 dplyr 行为相同):

DT[c("A", "D"), on = "V4", nomatch = 0] # keep only rows found in V4

使用 dplyr

filter(DF, V4 %in% c("A", "D")) # we only have equivalent to *nomatch=0* behaviour.

【问题讨论】:

  • dplyr 的过滤器不能很好地对应 DT 的 i 参数,它表现为 R 的子集,尝试:pi[1:2]
  • right outer join 是反映使用 dplyr 的正确操作,所以我认为@Edo 回答了你的问题。

标签: r filter dplyr data.table drop


【解决方案1】:

这将返回与DT[c("A", "D"), on = "V4", nomatch = NA] 相同的输出

df %>% right_join(data.frame(V4 = c("A", "D")), "V4")

可重现的例子:

library(dplyr)
df <- data.frame(V4 = LETTERS[c(1,1,2,2,3)], V3 = 1:5)
df %>% right_join(data.frame(V4 = c("A", "D")), "V4")
#>   V4 V3
#> 1  A  1
#> 2  A  2
#> 3  D NA

library(data.table)
DT <- as.data.table(df)
DT[c("A", "D"), on = "V4", nomatch = NA]
#>    V4 V3
#> 1:  A  1
#> 2:  A  2
#> 3:  D NA

【讨论】:

  • 感谢您的回答。我想知道是否有特定的语法来执行这样的操作,或者是否值得在 dplyr 中添加这样的选项用于计算目的。但似乎并非如此。
  • 所以我的答案不是你要找的..?
  • 它做我想要的东西,所以我会回答是的。但是,如果 dplyr 管理员直接在 dplyr 包中添加这样的选项会很好。
  • 您可以尝试在 dplyr 上打开问题
猜你喜欢
  • 2021-03-02
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多