Як виконати нечітку відповідність у r (з прикладом)


Часто вам може знадобитися об’єднати два набори даних у R на основі неповно відповідних рядків. Це іноді називають нечітким відповідністю .

Найпростіший спосіб виконати нечітку відповідність у R — це використовувати функцію stringdist_join() із пакету fuzzyjoin .

У наступному прикладі показано, як використовувати цю функцію на практиці.

Приклад: нечітка відповідність у R

Припустімо, що ми маємо наступні два кадри даних у R, які містять інформацію про різні баскетбольні команди:

 #create data frames
df1 <- data. frame (team=c('Mavericks', 'Nets', 'Warriors', 'Heat', 'Lakers'),
                  points=c(99, 90, 104, 117, 100))
df2 <- data. frame (team=c('Mavricks', 'Warrors', 'Heat', 'Netts', 'Kings', 'Lakes'),
                  assists=c(22, 29, 17, 40, 32, 30))

#view data frames
print (df1)

       team points
1 Mavericks 99
2 Nets 90
3 Warriors 104
4 Heat 117
5 Lakers 100

print (df2)

      team assists
1 Mavricks 22
2 Warriors 29
3 Heat 17
4 Netts 40
5 Kings 32
6 Lakes 30

Тепер припустімо, що ми хочемо виконати ліве об’єднання , де ми збережемо всі рядки з першого кадру даних і просто об’єднаємо їх на основі назви команди, яка найбільше відповідає другому кадру даних.

Для цього ми можемо використати такий код:

 library (fuzzyjoin)
library (dplyr)

#perform fuzzy matching left join
stringdist_join(df1, df2, 
                by=' team ', #match based on team
                mode=' left ', #use left join
                method = " jw ", #use jw distance metric
                max_dist=99, 
                distance_col=' dist ') %>%
  group_by(team.x) %>%
  slice_min(order_by=dist, n= 1 )

# A tibble: 5 x 5
# Groups: team.x [5]
  team.x points team.y assists dist
                 
1 Heat 117 Heat 17 0     
2 Lakers 100 Lakes 30 0.0556
3 Mavericks 99 Mavricks 22 0.0370
4 Nets 90 Nets 40 0.0667
5 Warriors 104 Warriors 29 0.0417

Результатом є кадр даних, що містить кожну з вихідних п’яти назв команд з першого кадру даних, а також команду, яка найбільше відповідає другому кадру даних.

Примітка №1 : ми вирішили використовувати метрику відстані jw для відповідності. Це скорочення від Jaro-Winkler distance , що є показником, який вимірює різницю між двома рядками.

Примітка №2: ми використали функцію slice_min() із пакета dplyr, щоб відобразити лише назву команди з другого кадру даних, яка найбільше відповідає назві команди з першого кадру даних.

Додаткові ресурси

У наступних посібниках пояснюється, як виконувати інші типові завдання в R:

Як об’єднати кілька кадрів даних у R
Як об’єднати кадри даних на основі кількох стовпців у R

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *