es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  ,

Answer

  1. Avatar for 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 columna original 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 columna check 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 columna original o no. La columna check utiliza ifelse para aplicar el reemplazo solo a las filas donde el patrón está presente.

Comments are closed.