library(tidyverse)
library(fuzzyjoin)
df1 <- tibble(col1 = c("Apple Shipping", "Banana Shipping", "FedEX USA Ground",
"FedEx USA Commercial", "FedEx International"),
col2 = 1:5)
#> # A tibble: 5 x 2
#> col1 col2
#> <chr> <int>
#> 1 Apple Shipping 1
#> 2 Banana Shipping 2
#> 3 FedEX USA Ground 3
#> 4 FedEx USA Commercial 4
#> 5 FedEx International 5
df2 <- tibble(col3 = c("Banana", "FedEX USA"), col4 = c(700, 900))
#> # A tibble: 2 x 2
#> col3 col4
#> <chr> <dbl>
#> 1 Banana 700
#> 2 FedEX USA 900
Два фрейма данных, с которыми я работаю, показаны выше. Я хотел бы присоединиться к ним на col1
и col3
, чтобы придумать нечто похожее на то, что прямо показано ниже. По существу, правило будет следующим: « Если весь текст в col3
находится в любом из col1
, то считается, что это соответствует ».
#> # A tibble: 3 x 4
#> col1 col2 col3 col4
#> <chr> <int> <chr> <int>
#> 1 Banana Shipping 2 Banana 700
#> 2 FedEX USA Ground 3 FedEx USA 900
#> 3 FedEx USA Commercial 4 FedEx USA 900
Это более старое SO Похоже, вопрос предлагает решение , но в данном случае оно не совсем работает, и я получаю ошибки, показанные ниже:
df1 %>% regex_inner_join(df2, by = c(string = "col3"))
#> Error: All columns in a tibble must be 1d or 2d objects:
#> * Column `col` is NULL
#> Run `rlang::last_error()` to see where the error occurred.
library(stringr)
df1 %>% fuzzy_inner_join(df2, by = c("string" = "col3"), match_fun = str_detect)
#> Error: All columns in a tibble must be 1d or 2d objects:
#> * Column `col` is NULL
#> Run `rlang::last_error()` to see where the error occurred.
Как выполнить нечеткое соединение с R?