0

レストランのデータセットがあり、変数「CONAME」には各施設の名前が含まれています。残念ながら、誤字脱字がかなりありますので、訂正したいと思います。次のコードを使用してファジー セット マッチングの agrep を試しました (すべての主要なチェーンについて繰り返します)。

rest2012$CONAME <- agrep("MC DONALD'S", rest2012$CONAME, ignore.case = FALSE, value = FALSE, max.distance = 3)

次のエラー メッセージが表示されます: Error in $<-.data.frame( *tmp*, "CONAME", value = c(35L, 40L, 48L, : replacement has 3074 rows, data has 67424)

スペルミスのある名前を置き換える別の方法はありますか、それとも agrep 関数を間違って使用しているだけですか?

4

1 に答える 1

1

結果で使用する場合agrepvalue = FALSE、「一致した要素のインデックスを与えるベクトル」です。つまり、フィードagrepした名前のベクトル内の一致の位置です。次に、データ フレーム内のname変数全体(67424 行) を、より短いインデックスのベクトル(3074 行) に置き換えようとします。あなたが望むものではありません。これは、おそらく正しい方向に導くことができる小さな例です。?Extractまた、これを読むこともできます。agrepそれ自体の詳細(例max.distance)はお任せします。

# create a data frame with some MC DONALD's-ish names, and some other names.
rest2012 <- data.frame(CONAME = c("MC DONALD'S", "MCC DONALD'S", "SPSS Café", "GLM RONALDO'S", "MCMCglmm"))
rest2012

# do some fuzzy matching with 'agrep'
# store the indices in an object named 'idx'
idx <- agrep(pattern = "MC DONALD'S", x = rest2012$CONAME, ignore.case = FALSE, value = FALSE, max.distance = 3)
idx

# just look at the rows in the data frame that matched
# indexing with a numeric vector 
rest2012[idx, ]

# replace the elements that matches 
rest2012[idx, ] <- "MC DONALD'S"
rest2012
于 2013-10-10T19:12:24.573 に答える