Me gustaría reemplazar los valores en un vector (x
) con los valores de otro vector (y
). Captura 22: los métodos deben ser dinámicos para adaptarse a diferentes números de "niveles" en el vector x
. Por ejemplo, considere el vector de x
reemplazar valores en un vector basado en otro vector
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
donde me gustaría reemplazar 1s con 100, 2s con 200 y así sucesivamente.
Esto se puede hacer fácilmente con un bucle for pero para vectores grandes, varios 100 mil valores, esto es altamente ineficiente. ¿Algún consejo sobre cómo optimizar el código?
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]
}
En el ejemplo de juguete incluso se podría utilizar y [x] –
O, simplemente x 100 * :) – VitoshKa
perfecto. Funciona incluso sin convertir a un factor y detecta si x tiene más "niveles" que los previstos por y. –