28

たくさんの名前があり、一意の名前を取得したいと考えています。ただし、スペルミスやデータの不一致により、名前が間違って書き留められる場合があります。2 つの文字列が類似している場合、文字列のベクトルをチェックインする方法を探しています。

例えば:

pres <- c(" Obama, B.","Bush, G.W.","Obama, B.H.","Clinton, W.J.")

私はそれを見つけたいと思って" Obama, B."おり"Obama, B.H."、非常に似ています。これを行う方法はありますか?

4

3 に答える 3

32

これは、例えばレーベンシュタイン距離に基づいて行うことができます。これには、さまざまなパッケージで複数の実装があります。いくつかのソリューションとパッケージは、次の質問への回答で見つけることができます。

しかし、ほとんどの場合agrep、あなたが望むことをします:

> sapply(pres,agrep,pres)
$` Obama, B.`
[1] 1 3

$`Bush, G.W.`
[1] 2

$`Obama, B.H.`
[1] 1 3

$`Clinton, W.J.`
[1] 4
于 2011-05-18T12:11:15.140 に答える
18

多分agrepあなたが欲しいものですか?レーベンシュタイン編集距離を使用して近似一致を検索します。

lapply(pres, agrep, pres, value = TRUE)

[[1]]
[1] " Obama, B."  "Obama, B.H."

[[2]]
[1] "Bush, G.W."

[[3]]
[1] " Obama, B."  "Obama, B.H."

[[4]]
[1] "Clinton, W.J."
于 2011-05-18T12:15:56.353 に答える