R: Regex_Join/Fuzzy_Join - объединяет неточные строки в разных порядках слов
df1
df2
DF3
library(dplyr)
library(fuzzyjoin)
df1 <- tibble(a =c("Apple Pear Orange", "Sock Shoe Hat", "Cat Mouse Dog"))
df2 <- tibble(b =c("Kiwi Lemon Apple", "Shirt Sock Glove", "Mouse Dog"),
c = c("Fruit", "Clothes", "Animals"))
# Appends 'Animals'
df3 <- regex_left_join(df1,df2, c("a" = "b"))
# Appends Nothing
df3 <- stringdist_left_join(df1, df2, by = c("a" = "b"), max_dist = 3, method = "lcs")
Я хочу добавить столбец c df2 к df1, используя строки "Apple", "Sock" и "Mouse Dog".
Я попытался сделать это с помощью regex_join и fuzzyjoin, но порядок строки, кажется, имеет значение, и, похоже, не может найти способ обойти это.
1 ответ
Решение
regex_left_join
работает, но не просто ищет сходства. Как говорится в описании,
Соединить таблицу со строковым столбцом по столбцу регулярного выражения в другой таблице
Итак, нам нужно предоставить шаблон регулярных выражений. Если df2$b
содержит отдельные слова интереса, мы можем сделать
(df2$regex <- gsub(" ", "|", df2$b))
# [1] "Kiwi|Lemon|Apple" "Shirt|Sock|Glove" "Mouse|Dog"
а потом
regex_left_join(df1, df2, by = c(a = "regex"))[-ncol(df1) - ncol(df2)]
# A tibble: 3 x 3
# a b c
# <chr> <chr> <chr>
# 1 Apple Pear Orange Kiwi Lemon Apple Fruit
# 2 Sock Shoe Hat Shirt Sock Glove Clothes
# 3 Cat Mouse Dog Mouse Dog Animals
где -ncol(df1) - ncol(df2)
просто удаляет последний столбец, содержащий шаблоны регулярных выражений.