R에서 퍼지 매칭을 수행하는 방법(예제 포함)
불완전하게 일치하는 문자열을 기반으로 R에서 두 데이터 세트를 결합하려는 경우가 종종 있습니다. 이를 퍼지 일치 라고도 합니다.
R에서 퍼지 매칭을 수행하는 가장 쉬운 방법은 fuzzyjoin 패키지의 stringdist_join() 함수를 사용하는 것입니다.
다음 예에서는 이 기능을 실제로 사용하는 방법을 보여줍니다.
예: 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
결과는 첫 번째 데이터 프레임의 원래 5개 팀 이름 각각과 두 번째 데이터 프레임과 가장 밀접하게 일치하는 팀을 포함하는 데이터 프레임입니다.
참고 #1 : 매칭을 위해 jw 거리 측정법을 사용하기로 선택했습니다. 이는 두 문자열 간의 차이를 측정하는 측정 기준인 Jaro-Winkler 거리의 약자입니다.
참고 #2: dplyr 패키지의 Slice_min() 함수를 사용하여 첫 번째 데이터 프레임의 팀 이름과 가장 밀접하게 일치하는 두 번째 데이터 프레임의 팀 이름만 표시했습니다.
추가 리소스
다음 튜토리얼에서는 R에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.