如何一次替换多个值

时间:2018-06-17 16:45:51

标签: r

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

在我正在解决的问题中:

  • 1应替换为2,
  • 2 with 4,
  • 3 with 6,
  • 4 with 8,
  • 5 with 1,
  • 6 with 3,
  • 7 with 5 and
  • 8 with 7。

那样:

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替换。

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

2 个答案:

答案 0 :(得分:6)

可能的解决方案:

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。这会导致old值{/ 1}}中位置的索引向量
  • 然后可以使用此索引向量来索引x
  • 仅将new中的值分配给newx oldx[x %in% old]的位置:'/\<BATCHALLOCATIONS.LIST\>[\s\S]+?\<\/BATCHALLOCATIONS.LIST\>/'

答案 1 :(得分:5)

如果可以为所有值定义转换对,则可以选择转换为factor然后转换为整数。

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

as.integer(as.character(factor(x, old, new)))
# [1] 8 4 0 5 1 5 7 9