私は文字列一致を行う必要がある大きなデータセットを持っています。私はこのサイトからいくつかの非常に便利な投稿を持っていて、私のデータセットの文字列マッチングを行う関数を作成しました。サンプルデータとコードを貼り付けています。R関数は列の値に基づいて繰り返されます
サンプルデータ
Address1 <- c("786, GALI NO 5, XYZ","rambo, 45, strret 4, atlast, pqr","23/4, 23RD FLOOR, STREET 2, ABC-E, PQR","45-B, GALI NO5, XYZ","HECTIC, 99 STREET, PQR")
AREACODE <- c('10','10','14','20','30')
Year1 <- c(2001:2005)
Address2 <- c("abc, pqr, xyz","786, GALI NO 4 XYZ","45B, GALI NO 5, XYZ","del, 546, strret2, towards east, pqr","23/4, STREET 2, PQR","abc, pqr, xyz","786, GALI NO 4 XYZ","45B, GALI NO 5, XYZ","del, 546, strret2, towards east, pqr","23/4, STREET 2, PQR")
Year2 <- c(2001:2010)
AREA_CODE <- c('10','10','10','20','30','40','50','61','64', '99')
data1 <- data.table(Address1, Year1, AREACODE)
data2 <- data.table(Address2, Year2, AREA_CODE)
data2[, unique_id := sprintf("%06d", 1:nrow(data2))]
CODE
fn.fuzzymatch<-function(dat1,dat2,string1,string2,meth){
dist.name<-stringdistmatrix(dat1[[string1]],dat2[[string2]],method = meth)
min.name<-apply(dist.name, 1, min)
match.s1.s2<-NULL
for(i in 1:nrow(dist.name))
{
s2.i<-match(min.name[i],dist.name[i,])
s1.i<-i
match.s1.s2<-rbind(data.frame(s1_row=s1.i,s2_row=s2.i,s1name=dat1[s1.i,][[string1]],s2name=dat2[s2.i,][[string2]], dist=min.name[i]),match.s1.s2)
}
output <- (match.s1.s2)[order(match.s1.s2$s1_row),]
return(output)
}
match_50 <- fn.fuzzymatch(data1,data2,"Address1","Address2","dl")
これは、国レベルでのデータのために正常に動作しているが、その後私は、地域レベルでの複数のデータファイルがあり、各領域であります複数の領域を有する。各地域のAreacodeは、AREACODE data1の変数とAREA_CODE data2の変数で利用できます。私は、文字列マッチングは、エリアごとに行われ、出力はそのエリアコードを持っている
- ように、私の機能を更新したいです。
私はsplitを使用してデータファイルをリストに変換して使用し、rbindlistを使用して結合しましたが、成功することができず、さまざまな種類のエラーが発生していました。私はこれを行う方法があると確信していますが、それを得ることはできません。私はいくつかの提案ができることを願っています。
あなたはこれまでにしようとしているコードを共有してもらえますか? Data1とData2は、データが地域レベルでどのように見えるかを表していますか? –
@JuanBosco、はいdat1とdat2は、データが地域レベルでどのように見えるかを表します。このように私は10の地域のための複数のデータファイルを持っています。私はこの現在の機能を10回呼んでいました。しかし今、私は各地域のためのチェックを行い、地域のための出力を得る必要があります。各地域は10〜40の異なるエリアを持つことができ、合計で190のユニークエリアがあります。 – user1412
あなたの関数は、データセットのペアを取り、それらのオペレーションを実行することがわかります。各エリアをチェックするとどういう意味ですか?第1のデータセットの各エリア、第2のデータセットのエリアのすべての組み合わせ、要するに、あなたの期待される出力は? あなたの現在の機能を使っていくつかの可能な出力を達成できると思いますが、私はあなたが必要とするものを完全には分かっていません。 –