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 reemplazar valores en una columna con valores de otra columna de otro conjunto de datos basado en una condición en R?

Tengo dos conjuntos de datos, cuyas muestras se muestran a continuación. Necesito reemplazar los nombres de proyectos en target_df$project_name, en caso de que estén presentes en registry_df$to_change, con los valores correspondientes en registry_df$replacement. Sin embargo, el código que intenté, obviamente, no entregó ningún resultado. ¿Cómo se debe corregir o qué otra forma hay de lograr el objetivo deseado?

Conjuntos de datos:

target_df <- tibble::tribble(
  ~project_name,     ~sum,<br>
  "Mark",            "4307",<br>
  "Boat",            "9567",<br>
  "Delorean",        "5344",<br>
  "Parix",           "1043",
)

registry_df <- tibble::tribble(
  ~to_change,     ~replacement,<br>
  "Mark",            "Duck",<br>
  "Boat",            "Tank",<br>
  "Toloune",         "Bordeaux",<br>
  "Hunge",           "Juron",
)


Resultado deseado de target_df :

project_name sum
“Duck” “4307”
“Tank” “9567”
“Delorean” “5344”
“Parix” “1043”

Código:

library(data.table)

target_df <- transform(target_df, 
                       project_name = ifelse(target_df$project_name %in% registry_df$to_change,
                                              registry_df$replacement,
                                              project_name
                                              )
                      )
Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay un problema con la sintaxis de la función ifelse() en el código proporcionado. La sintaxis correcta es la siguiente:

    target_df$project_name <- ifelse(target_df$project_name %in% registry_df$to_change,
                                     registry_df$replacement[match(target_df$project_name, registry_df$to_change)],
                                     target_df$project_name)
    

    Este código reemplaza los valores en target_df$project_name con los valores correspondientes en registry_df$replacement si están presentes en registry_df$to_change. La función match() se utiliza para encontrar los índices de los valores coincidentes en registry_df$to_change.

Comments are closed.