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에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

R에서 여러 데이터 프레임을 병합하는 방법
R의 여러 열을 기반으로 데이터 프레임을 병합하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다