vectores variable valores valor una reemplazar por perdidos modificar columna cambiar r replace

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))