Cara melakukan pencocokan fuzzy di r (dengan contoh)


Seringkali Anda mungkin ingin menggabungkan dua kumpulan data di R berdasarkan string yang tidak cocok secara sempurna. Hal ini kadang-kadang disebut pencocokan fuzzy .

Cara termudah untuk melakukan pencocokan fuzzy di R adalah dengan menggunakan fungsi stringdist_join() dari paket fuzzyjoin .

Contoh berikut menunjukkan cara menggunakan fungsi ini dalam praktiknya.

Contoh: pencocokan fuzzy di R

Misalkan kita memiliki dua bingkai data berikut di R yang berisi informasi tentang berbagai tim bola basket:

 #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

Sekarang katakanlah kita ingin melakukan penggabungan kiri di mana kita menyimpan semua baris dari bingkai data pertama dan menggabungkannya berdasarkan nama tim yang paling cocok dengan bingkai data kedua.

Kita dapat menggunakan kode berikut untuk melakukan ini:

 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

Hasilnya adalah bingkai data yang berisi masing-masing dari lima nama tim asli dari bingkai data pertama serta tim yang paling cocok dengan bingkai data kedua.

Catatan #1 : Kami memilih untuk menggunakan metrik jarak jw untuk pencocokan. Ini adalah kependekan dari jarak Jaro-Winkler , yang merupakan metrik yang mengukur perbedaan antara dua string.

Catatan #2: Kami menggunakan fungsi slice_min() dari paket dplyr untuk hanya menampilkan nama tim dari bingkai data kedua yang paling cocok dengan nama tim dari bingkai data pertama.

Sumber daya tambahan

Tutorial berikut menjelaskan cara melakukan tugas umum lainnya di R:

Cara menggabungkan beberapa frame data di R
Cara menggabungkan bingkai data berdasarkan beberapa kolom di R

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *