Reemplazar caracteres usando gsub, ¿cómo crear una función?

Estoy tratando de reemplazar personajes en un data.frame. Tengo una solución para esto

> df  df var1 1 aabbcdefg 2 aabbcdefg > df$var1  df$var1  df$var1  df$var1  df$var1  df$var1  df var1 1 hhiijklmg 2 hhiijklmg > 

pero me gustaría evitar el uso de varias llamadas a gsub, ¿sería mucho mejor crear una función para hacer esto de una vez?

¿Alguna idea de seguir?

Puede crear from y to vectores:

 from <- c('a','b','c','d','e','f') to <- c('h','i','j','k','l','m') 

y luego vectorizar la función gsub :

 gsub2 <- function(pattern, replacement, x, ...) { for(i in 1:length(pattern)) x <- gsub(pattern[i], replacement[i], x, ...) x } 

Lo que da:

 > df <- data.frame(var1 = c("aabbcdefg", "aabbcdefg")) > df$var1 <- gsub2(from, to, df$var1) > df var1 1 hhiijklmg 2 hhiijklmg 

Quieres chartr :

 df$var1 <- chartr("abcdef", "hijklm", df$var1) df # var1 # 1 hhiijklmg # 2 hhiijklmg 

Si no quiere usar Chartr porque las sustituciones pueden ser de más de un carácter, entonces otra opción es usar gsubfn del paquete gsubfn (sé que esto no es gsub, sino que es una expansión en gsub). Aquí hay un ejemplo:

 > library(gsubfn) > tmp <- list(a='apple',b='banana',c='cherry') > gsubfn('.', tmp, 'abcd') [1] "apple.banana.cherry.d" 

El reemplazo también puede ser una función que tomaría la coincidencia y devolvería el valor de reemplazo para esa coincidencia.

    Intereting Posts