Как нечетко соединить 2 кадра данных по 2 переменным с разными «нечеткими логиками c»? - PullRequest
0 голосов
/ 27 марта 2020
# example
a <- data.frame(name=c("A","B","C"), KW=c(201902,201904,201905),price=c(1.99,3.02,5.00))
b <- data.frame(KW=c(201903,201904,201904),price=c(1.98,3.00,5.00),name=c("a","b","c"))

Я хочу сопоставить a и b с нечеткой логикой c, используя переменные KW и цену. Я хочу разрешить допуск +/- 1 для KW и допуск для +/- 0,02 в цене.

Желаемый результат должен выглядеть следующим образом:

name.x   KW.x price.x   KW.y price.y name.y
1    A 201902    1.99 201903    1.98      a
2    B 201904    3.02 201904    3.00      b
3    C 201905    5.00 201904    5.00      c

Я бы предпочел найти решение с использованием пакета fuzzyjoin. До сих пор я пытался использовать функцию fuzzy_inner_join и указывать желаемые значения для KW и цены с помощью аргумента match_fun. Однако я не смог заставить его работать.

Нужна помощь, как решить эту проблему.

1 Ответ

0 голосов
/ 27 марта 2020

Вы можете создать декартово произведение двух информационных кадров, используя merge, а затем subset строки, которые соответствуют нашим требуемым условиям.

subset(merge(a, b, by = NULL), abs(KW.x - KW.y) <= 1 & 
                               abs(price.x - price.y) <= 0.02)

#  name.x   KW.x price.x   KW.y price.y name.y
#1      A 201902    1.99 201903    1.98      a
#5      B 201904    3.02 201904    3.00      b
#9      C 201905    5.00 201904    5.00      c
...