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.

Mutar la variable si ciertas columnas contienen una cadena en R.

He estado luchando durante horas con este conjunto de datos. He buscado durante horas y he intentado muchas cosas, pero he fallado (soy un novato en R). Así que realmente espero que puedan ayudarme.

Tengo este conjunto de datos:

  df <- data.frame(ID = c(1,2,3,4,5), a.1 = c("A", "C", "C", "B","D"), a.2 = c("C", "C", "D", "A","B"), b.1 = c("D", "C", "A", "B","D"), b.2 = c("D", "B", "C", "A","A"))

ID a.1 a.2 b.1 b.2
1 1 A C D D
2 2 C C C B
3 3 C D A C
4 4 B A B A
5 5 D B D A

Me gustaría crear una nueva variable llamada “resultado” para ser:
– “1” si una de las columnas con prefijo “a.” contiene “A” o “B”
– “0” si una de las columnas con prefijo “a.” no contiene “A” o “B”

Así que obtendría el siguiente resultado:

ID a.1 a.2 b.1 b.2 resultado
1 1 A C D D 1
2 2 C C C B 0
3 3 C D A C 0
4 4 B A B A 1
5 5 D B D A 1

En mi conjunto de datos real tengo 100 variables con prefijo “a.”, por lo que no puedo seleccionar las columnas individualmente.

¡Espero que puedan ayudarme!

¡Muchas gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás buscando una manera de crear una variable nueva, result, basada en los valores de las columnas con el prefijo a.. Si una de las columnas con el prefijo a. contiene ya sea A o B, entonces result debe ser 1, de lo contrario 0.

    Si entiendo correctamente, puedes usar la función mutate del paquete dplyr para crear la nueva variable. Puedes usar la función any para comprobar si alguna de las columnas con el prefijo a. contiene ya sea A o B.

    Aquí tienes un ejemplo de cómo puedes usar mutate y any para crear la nueva variable:

    library(dplyr)
    
    df %>% 
      mutate(result = ifelse(any(grepl("A|B", select(., starts_with("a.")))), 1, 0))
    

    Esto debería darte el siguiente resultado:

      ID a.1 a.2 b.1 b.2 result
    1  1   A   C   D   D      1
    2  2   C   C   C   B      0
    3  3   C   D   A   C      0
    4  4   B   A   B   A      1
    5  5   D   B   D   A      1
    

Comments are closed.