我想用另一个向量(x
)中的值替换向量(y
)中的值。捕获22:方法需要是动态的,以适应向量x
中不同数量的“级别”。例如,考虑向量x
x <- sample(c(1, 2, 3, 4, 5), 100, replace = TRUE)
> x
[1] 2 4 1 1 3 1 1 1 1 1 2 2 5 5 4 5 5 3 4 1 2 2 3 3 3 5 1 3 4 5 5 3 2 4 3 1 3
[38] 1 4 5 4 1 4 5 4 5 2 4 2 5 3 4 3 1 2 1 1 5 1 4 2 2 5 2 2 4 5 2 4 5 2 5 4 1
[75] 3 3 4 4 1 1 4 4 2 4 5 4 5 5 4 2 5 2 4 5 3 2 1 1 2 2
我想用100替换1,用200替换2,依此类推。
这可以通过for循环轻松完成,但对于大型向量,几十万个值,这是非常低效的。有关如何优化代码的任何提示吗?
x <- sample(c(1, 2, 3, 4, 5), 100, replace = TRUE)
y <- c(100, 200, 300, 400, 500)
x.lvl <- c(1, 2, 3, 4, 5)
x.temp <- x
for (i in 1:length(y)) {
x.temp[which(x == x.lvl[i])] <- y[i]
}
答案 0 :(得分:17)
尝试使用match
y[match(x, x.lvl)]
答案 1 :(得分:9)
使用因素可能会更快:
xf <- as.factor(x)
y[xf]
注意,levels(xf)
为您提供了与x.lvl类似的字符向量。因此,为了使这种方法起作用,y的元素应该对应于levels(xf)
的适当元素。