GOOGLE ADS

воскресенье, 1 мая 2022 г.

Нечеткое сопоставление двух фреймов данных

Я хочу объединить два кадра данных df1 и df2.

df1<-tibble(x=c("FIDELITY FREEDOM 2015 FUND", "VANGUARD WELLESLEY INCOME FUND"),y=c(1,2))

df2<-tibble(x=c("FIDELITY ABERDEEN STREET TRUST: FIDELITY FREEDOM 2015 FUND", "VANGUARD/WELLESLEY INCOME FUND, INC: VANGUARD WELLESLEY INCOME FUND; INVESTOR SHARES"),z=c(2020,2021))

Я хочу объединить df1 и df2 на основе x. В настоящее время я пробую нечеткое сопоставление и использую

fuzzy_join(df1,df2,match_fun = function(x,y) grepl(x, y))

Это дает мне вывод следующим образом:

In grepl(x, y):
argument 'pattern' has length > 1 and only the first element will be used.

У вас есть идеи по объединению df1 и df2? Я думаю о том, как написать функцию match_fun, но не знаю, как двигаться дальше. Большое спасибо!


Решение проблемы

Мы могли бы использовать fuzzy_inner_joinили regex_inner_joinfrom fuzzyjoinpackage.

library(fuzzyjoin)
library(stringr)
df2 %>% fuzzy_inner_join(df1, by = "x", match_fun = str_detect)

 x.x      z x.y  y
<chr> <dbl> <chr> <dbl>
1 FIDELITY ABERDEEN STREET TRUST: FIDELITY FREEDOM 2015 FUND 2020 FIDELITY FREEDOM 2015 FUND 1
2 VANGUARD/WELLESLEY INCOME FUND, INC: VANGUARD WELLESLEY INCOME FUND; INVESTOR SHARES 2021 VANGUARD WELLESLEY INCOME FUND 2

или:

library(fuzzyjoin)
df2 %>% regex_inner_join(df1, by = "x")

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...