我想一次用特定的其他值替换矢量中的不同值。
在我正在解决的问题中:
那样:
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替换。
在不使用任何软件包的情况下解决此问题的最简单方法是什么?
答案 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
中的值分配给new
中x
old
中x[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