首页 > 解决方案 > 如何一次替换多个值

问题描述

我想一次用特定的其他值替换向量中的不同值。

在我正在解决的问题中:

以便:

x <- c(4, 2, 0, 7, 5, 7, 8, 9)
x
[1] 4 2 0 7 5 7 8 9

将转换为:

[1] 8 4 0 5 1 5 7 9

更换后。

我试过使用:

x[x == 1] <- 2
x[x == 2] <- 4

依此类推,但这会导致 1 被 7 替换。

在不使用任何软件包的情况下,这个问题的最简单解决方案是什么?

标签: r

解决方案


一个可能的解决方案:

old <- 1:8
new <- c(2,4,6,8,1,3,5,7)

x[x %in% old] <- new[match(x, old, nomatch = 0)]

这使:

> x
[1] 8 4 0 5 1 5 7 9

这是做什么的:

  • 创建两个向量:old需要替换的值和new对应的替换值。
  • 用于match查看值的x出现位置old。用于nomatch = 0删除NA's。这导致值的位置old的索引向量x
  • 然后可以使用该索引向量对 进行索引new
  • 仅将值分配给中存在new的位置:xoldx[x %in% old]

推荐阅读