variable - Reemplazar el valor dado en el vector
reemplazar valores perdidos en r (5)
La función ifelse
sería una forma rápida y fácil de hacer esto.
Estoy buscando una función que reemplace todas las apariciones de un valor con otro valor. Por ejemplo, me gustaría reemplazar todos los ceros con unos. No quiero tener que almacenar el resultado en una variable, pero quiero poder usar el vector de forma anónima como parte de una expresión más grande.
Sé cómo escribir una función adecuada yo mismo:
> vrepl <- function(haystack, needle, replacement) {
+ haystack[haystack == needle] <- replacement
+ return(haystack)
+ }
>
> vrepl(c(3, 2, 1, 0, 4, 0), 0, 1)
[1] 3 2 1 1 4 1
Pero me pregunto si hay alguna función estándar para hacer este trabajo, preferiblemente desde el paquete base
, como alternativa a algún otro paquete comúnmente usado. Creo que usar ese estándar probablemente hará que mi código sea más legible, y no tendré que redefinir esa función donde la necesite.
Otra opción más sencilla es hacer:
> x = c(1, 1, 2, 4, 5, 2, 1, 3, 2)
> x[x==1] <- 0
> x
[1] 0 0 2 4 5 2 0 3 2
Para reemplazar más de un número:
vec <- 1:10
replace(vec, vec== c(2,6), c(0,9)) #2 and 6 will be replaced by 0 and 9.
Editar:
para una serie continua, puedes hacer esto vec <- c(1:10); replace(vec, vec %in% c(2,6), c(0,9))
vec <- c(1:10); replace(vec, vec %in% c(2,6), c(0,9))
pero para vec <- c(1:10,2,2,2); replace(vec, vec %in% c(2,6), 0)
vec <- c(1:10,2,2,2); replace(vec, vec %in% c(2,6), 0)
podemos reemplazar varios valores con un solo valor.
Para vectores de factores o caracteres , podemos usar la revalue
de plyr
:
> revalue(c("a", "b", "c"), c("b" = "B"))
[1] "a" "B" "c"
Esto tiene la ventaja de solo especificar el vector de entrada una vez, por lo que podemos usar una tubería como
x %>% revalue(c("b" = "B"))
Quizás replace
es lo que estás buscando:
> x = c(3, 2, 1, 0, 4, 0)
> replace(x, x==0, 1)
[1] 3 2 1 1 4 1
O, si no tienes x
(¿alguna razón específica por qué no?):
replace(c(3, 2, 1, 0, 4, 0), c(3, 2, 1, 0, 4, 0)==0, 1)
Muchas personas están familiarizadas con gsub
, por lo que también puedes probar cualquiera de los siguientes:
as.numeric(gsub(0, 1, x))
as.numeric(gsub(0, 1, c(3, 2, 1, 0, 4, 0)))
Actualizar
Después de leer los comentarios, quizás with
una opción:
with(data.frame(x = c(3, 2, 1, 0, 4, 0)), replace(x, x == 0, 1))