我有包含 3 个相关变量的数据:第一个是活动 (x1),第二个是受访者对该活动的评分 (x2),第三个是 x1 (x3) 中活动的专有名称。x1 变量是受访者编写的,与活动 x3 的参考变量非常接近,但都有些不同。我想用参考 x3 匹配并替换所有 x1 - 我正在考虑使用一个循环来引用每个参考活动 x3,并使用 agrep 之类的程序替换 x1 受访者的书面活动。但是, agrep 似乎只是告诉我匹配是什么。如何用 x3 中的“正确”字符串标题替换 x1 变量?
kirk
问问题
982 次
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 回答