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 combinar dos columnas utilizando algunas condiciones?

Sé que esto no es un gran problema, pero soy nuevo en esto. Tengo esta salida obtenida al fusionar dos marcos de datos. Cada uno tiene una columna que corresponde al sexo de cada participante de un evento.

Sex.x Sex.y
M M
F F
F M
M M
F F
M M
NA M
F F

Salida deseada: las dos columnas mezcladas en una que tiene “?” cuando sus dos valores no coinciden y que conserva el único valor si hay un NA en la celda adyacente.

F_Sex
M
F
?
M
F
M
M
F

Estaba intentando hacerlo con el paquete dplyr pero solo llego a este código. Sé que necesito usar if_else pero después de muchos intentos, no tengo nada.

all_data1 <- all_data %>% unite(F_sexo, c(sexo.x, sexo.y), sep = "-", remove = TRUE)

Muchas gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear la salida deseada usando dplyr, podemos usar la función mutate() junto con if_else(). La lógica básica es verificar si los valores en ambas columnas son iguales, si sí, entonces mantener ese valor, de lo contrario, reemplazarlo con "?". Además, si hay un valor faltante (NA) en una columna, simplemente mantener el valor de la otra columna. Así es como podemos implementarlo:

    “`{r}
    library(dplyr)

    creación de datos de muestra

    df <- data.frame(Sex.x = c(“M”, “F”, “F”, “M”, “F”, “M”, NA, “F”),
    Sex.y = c(“M”, “F”, “M”, “M”, “F”, “M”, “M”, “F”))

    usar mutate y if_else para crear la columna deseada

    df %>%
    mutate(F_Sex = if_else(!is.na(Sex.x) & !is.na(Sex.y),
    if_else(Sex.x == Sex.y, Sex.x, “?”),
    if_else(is.na(Sex.x), Sex.y, Sex.x)))


    Esto nos dará la salida deseada:

    Sex.x Sex.y F_Sex
    1 M M M
    2 F F F
    3 F M ?
    4 M M M
    5 F F F
    6 M M M
    7 M M
    8 F F F
    “`

    Aquí, primero verificamos si tanto Sex.x como Sex.y no son faltantes (NA) usando !is.na(), luego usamos otra función if_else() para verificar si esos valores son iguales o no. Si son iguales, mantenemos ese valor (Sex.x en este caso), de lo contrario lo reemplazamos con "?". Si alguna de las columnas tiene un valor faltante, luego conservamos el valor de la otra columna usando otra función if_else(). Finalmente, creamos una nueva columna llamada F_Sex con los valores modificados usando mutate().

Comments are closed.