2

関連する 3 つの変数を含むデータがあります。1 つ目はアクティビティ (x1)、2 つ目はそのアクティビティの回答者の評価 (x2)、3 つ目は x1 のアクティビティの適切な名前 (x3) です。x1 変数は回答者が記述したもので、アクティビティ x3 の参照変数と非常によく似ていますが、すべてが少し異なります。すべての x1 を参照 x3 に一致させて置き換えたいと思います。各参照アクティビティ x3 を参照するループを使用し、agrep のようなプログラムを使用して x1 回答者の書き込みアクティビティを置き換えることを考えていました。ただし、 agrep は、一致が何であるかを教えてくれるだけのようです。x1変数をx3の「正しい」文字列タイトルに置き換えるにはどうすればよいですか?

4

1 に答える 1

1

R では、関数agrepは一致の数ではなく、一致が見つかったインデックスを返します。

agrep('chrg', c('charge', 'trapper', 'friend', 'charger'))
# [1] 1 4

インデックスの代わりに値が必要な場合は、 を渡すことができますvalue=TRUE

agrep('chrg', c('charge', 'trapper', 'friend', 'charger'), value=TRUE)
# [1] "charge"  "charger"

更新後の編集:

x1とがフェーズにある場合x3(インデックスごとに同じアクティビティの名前がある場合)、これを行うスニペットを次に示します。

subs <- function(x, old, new) {
    # Replace 'old' by 'new' in 'x'.
    matchv <- match(x, old, nomatch=0)
    replace(x, matchv > 0, new[matchv])
}
# y is any vector that contains short names.
subs(y, x1, x3)

それらが同相でない場合は、 を使用して次のようにoldおよびnewベクトルを作成できますagrep

oldnew <- sapply(x1, function(x) { agrep(x, x3, value=TRUE)[1] })
subs(y, names(oldnew), oldnew)
于 2012-07-28T18:55:47.483 に答える