2

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

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"

更新后编辑:

如果x1x3是同相的(对于每个索引,您都有相同活动的名称),这是一个可以解决问题的片段。

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和向量。newagrep

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