¿Cómo puedo almacenar registros que se reemplazan en comparación con los datos originales en R?
Ya pregunté y obtuve la solución sobre este tema. Sin embargo, además, quiero verificar qué datos se reemplazan en la nueva columna. Solo intenté lo siguiente:
df$check <- str_match_all(df, "\\\\d{11}") %% unlist
Pero no funcionó. En última instancia, quiero obtener el siguiente conjunto de datos:
original edited check
1 010-1234-5678 010-1234-5678<br>
2 John 010-8888-8888 John 010-8888-8888<br>
3 Phone: 010-1111-2222 Phone: 010-1111-2222<br>
4 Peter 018.1111.3333 Peter 018.1111.3333<br>
5 Year(2007,2019,2020) Year(2007,2019,2020)<br>
6 Alice 01077776666 Alice 010-9999-9999 01077776666
````
Aquí está mi código:
```R
x = c("010-1234-5678",
"John 010-8888-8888",
"Phone: 010-1111-2222",
"Peter 018.1111.3333",
"Year(2007,2019,2020)",
"Alice 01077776666")
df = data.frame(
original = x
)
df$edited <- gsub("\\\\d{11}", "010-9999-9999", df$original)
df$check <- c("","","","","","01077776666") # Quiero saber cómo hacerlo aquí.
Gracias.
davy.ai
Para verificar qué datos se reemplazan en la nueva columna, puedes usar la función
grepl
para buscar el patrón en la columnaoriginal
y crear una columna lógica que indique si ese patrón está presente o no. Luego puedes usar esa columna lógica para crear la columnacheck
con los datos reemplazados. Aquí está el código modificado:“`{r}
x = c(“010-1234-5678”,
“John 010-8888-8888”,
“Phone: 010-1111-2222”,
“Peter 018.1111.3333”,
“Year(2007,2019,2020)”,
“Alice 01077776666”)
df = data.frame(
original = x
)
df$edited <- gsub(“\d{11}”, “010-9999-9999”, df$original)
df$has_replaced <- grepl(“\d{11}”, df$original)
df$check <- ifelse(df$has_replaced, gsub(“\d{11}”, “010-9999-9999”, df$original), “”)
df
Output
original edited has_replaced check
1 010-1234-5678 010-9999-9999 TRUE 010-1234-5678
2 John 010-8888-8888 John 010-9999-9999 TRUE John 010-8888-8888
3 Phone: 010-1111-2222 Phone: 010-9999-9999 TRUE Phone: 010-1111-2222
4 Peter 018.1111.3333 Peter 018.1111.3333 FALSE
5 Year(2007,2019,2020) Year(2007,2019,2020) FALSE
6 Alice 01077776666 Alice 010-9999-9999 TRUE Alice 01077776666
“`
La columna
has_replaced
indica si el patrón\d{11}
(11 dígitos) está presente en la columnaoriginal
o no. La columnacheck
utilizaifelse
para aplicar el reemplazo solo a las filas donde el patrón está presente.