Anti_join 按模式
Anti_join by pattern
Tibble A
包含可以在 tibble B
中找到的 keys/patterns。我的目标是识别在 tibble B
.
中未找到的 keys/patterns
我想通过匹配模式反连接两个表:
A <- tibble( colA = c("B12", "B19", "B202", "B87", "B61", "B55") )
B <- tibble( colB = c("aaB87aa", "bbbbB55", "B202cccc") )
我发现 fuzzyjoin
中的功能应该可以工作,但我无法正确使用它:
test <- regex_anti_join(A, B, by = c(colB = "colA"))
编辑
最后我想要这样的东西:
test
1 B12
2 B19
3 B61
给定示例数据的一个 dplyr
选项可以是:
A %>%
filter(!colA %in% gsub("[a-z]", "", B$colB))
colA
<chr>
1 B12
2 B19
3 B61
regex_anti_join(A, B, by = c(colA = colB))
在 colA
中执行 colB
的 str_detect
。在你的情况下,这个 return 什么都没有,因此结果是空的。
您需要做的是相反的操作:在 colB
.
中搜索 colA
这可以通过将匹配函数指定为 regex_anti_join
使用的 fuzzy_join
函数来实现:
library(fuzzyjoin)
# This is exactly the inverse of the match_fun used inside regex_anti_join
match_fun <- function(v1, v2) {
stringr::str_detect(v2, stringr::regex(v1))
}
fuzzy_join(A, B, by = c("colA" = "colB"), match_fun=match_fun, mode = 'anti')
#> # A tibble: 3 x 1
#> colA
#> <chr>
#> 1 B12
#> 2 B19
#> 3 B61
由 reprex package (v0.3.0)
于 2020-07-17 创建
Tibble A
包含可以在 tibble B
中找到的 keys/patterns。我的目标是识别在 tibble B
.
我想通过匹配模式反连接两个表:
A <- tibble( colA = c("B12", "B19", "B202", "B87", "B61", "B55") )
B <- tibble( colB = c("aaB87aa", "bbbbB55", "B202cccc") )
我发现 fuzzyjoin
中的功能应该可以工作,但我无法正确使用它:
test <- regex_anti_join(A, B, by = c(colB = "colA"))
编辑
最后我想要这样的东西:
test
1 B12
2 B19
3 B61
给定示例数据的一个 dplyr
选项可以是:
A %>%
filter(!colA %in% gsub("[a-z]", "", B$colB))
colA
<chr>
1 B12
2 B19
3 B61
regex_anti_join(A, B, by = c(colA = colB))
在 colA
中执行 colB
的 str_detect
。在你的情况下,这个 return 什么都没有,因此结果是空的。
您需要做的是相反的操作:在 colB
.
colA
这可以通过将匹配函数指定为 regex_anti_join
使用的 fuzzy_join
函数来实现:
library(fuzzyjoin)
# This is exactly the inverse of the match_fun used inside regex_anti_join
match_fun <- function(v1, v2) {
stringr::str_detect(v2, stringr::regex(v1))
}
fuzzy_join(A, B, by = c("colA" = "colB"), match_fun=match_fun, mode = 'anti')
#> # A tibble: 3 x 1
#> colA
#> <chr>
#> 1 B12
#> 2 B19
#> 3 B61
由 reprex package (v0.3.0)
于 2020-07-17 创建