【问题标题】:replace several values in a vector in R替换R中向量中的几个值
【发布时间】:2016-11-25 15:30:58
【问题描述】:

假设我有一个向量

target <- c(19,15,12,21,20,9,15,14)

现在,我想用其他值替换该向量中的所有值,比如说用相应的字母。所以,我知道以前的价值观是什么......

before <- 1:26

而且我知道他们之后的样子......

after <- letters[1:26]

现在,我想将target 中与before 中的值相等的所有值替换为after 中的相应值。我想使用函数(例如应用函数)来做到这一点:

someFancyFunction(target, before, after)

[1] "s" "o" "l" "u" "t" "i" "o" "n"

我最好的主意是使用mapply()

myFun <- function(x,y,z){
    x[x==y] <- z
    x
}

mapply(myFun, y = before, z = after, MoreArgs = list(x = target))

但这当然会返回一个矩阵,而我希望所有迭代都应用于同一个向量。有人可以帮忙吗?

只是为了确定。我知道如何编辑子集向量,并且知道如何使用循环来完成。我真的很想用一个函数来做。

【问题讨论】:

  • 只要使用after[target]
  • 你可以 Vectorize() 你的 y 和 z 函数
  • 概括@akrun 的解决方案:after[match(target,before)].
  • 为了扩展 akrun 的答案(这个问题肯定是重复的),您正在尝试重新发明“[”函数。可以将他的答案写为"["(letters, target &lt;- c(19,15,12,21,20,9,15,14) )。 `mapply 不会成功,因为 target 和 after 的长度不一样。
  • 也看chartr

标签: r vector


【解决方案1】:

这就是解决方案 - 优雅、快速、易读:

after[match(target,before)]

这实际上不是我的解决方案,而是 @nicola 的(请参阅问题的 cmets)。如果他发布相同的答案,我很乐意删除我的答案。

【讨论】:

    猜你喜欢
    • 2017-07-31
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多