R: Regex_Join / Fuzzy_Join - объединяет неточные строки в разных порядках слов - PullRequest
0 голосов
/ 07 января 2019

df1

enter image description here

df2

enter image description here

DF3

enter image description here

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, используя строки, «Яблоко», «Носок» и «Мышиный пес».

Я пытался сделать это с regex_join и fuzzyjoin , но порядок строки, кажется, имеет значение, и, похоже, не может найти способ обойти это.

1 Ответ

0 голосов
/ 07 января 2019

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) просто удаляет последний столбец, содержащий шаблоны регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...