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.

Agrupe por ID y Resultado y tome las fechas más tempranas de resultados específicos y asígneles números (por ejemplo, resultado1, resultado2).

Disculpen si no estoy explicando esto claramente. Tengo el siguiente conjunto de datos:

mydata = data.frame(Id = c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2), 
                    Date = c("2001-01-31", "2001-02-13", "2001-05-31", "2001-06-02",
                             "2018-01-31", "2018-03-31", "2018-07-31", "2019-04-04",
                             "2014-01-31", "2014-02-02", "2014-04-31", "2014-05-18"),
                    Outcome = c("CR", "CR", "Relapse", "Relapse",
                                "CR", "CR", "CR", "Relapse",
                                "CR", "CR", "Relapse", "CR"))

Lo que se muestra a continuación. Como se puede ver, cada paciente se encuentra en ciertas fases en diferentes momentos y me gustaría capturar las fechas más tempranas de cuándo comienza cada nueva fase por paciente. Me gustaría entonces renombrar estas fases a CR1, Recaída1, CR2, Recaída2, y así sucesivamente.

 Id       Date     Outcome
  1 2001-01-31          CR
  1 2001-02-13          CR
  1 2001-05-31     Relapse
  1 2001-06-02     Relapse
  1 2018-01-31          CR
  1 2018-03-31          CR
  1 2018-07-31          CR
  1 2019-04-04     Relapse
  2 2014-01-31          CR
  2 2014-02-02          CR
  2 2014-04-31     Relapse
  2 2014-05-18          CR

Este es el resultado que intento lograr:

 Id       CR1    Relapse1       CR2    Relapse2
  1 2001-01-31 2001-05-31 2018-01-31 2019-04-04
  2 2014-01-31 2014-04-31 2014-05-18         NA

No estoy seguro por dónde empezar con esta pregunta y agradecería cualquier ayuda. ¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el resultado deseado, podemos seguir estos pasos:

    1. Convertir la columna de Fecha a un formato de fecha adecuado utilizando as.Date().
    2. Utilizar la función group_by() del paquete dplyr para agrupar los datos por Id y Outcome.
    3. Utilizar la función summarize() para obtener la fecha mínima para cada grupo.
    4. Pivotea los datos utilizando la función pivot_wider() del paquete tidyr para transformar los datos en el formato deseado.

    Aquí está el código de R para lograrlo:

    “` {r}
    biblioteca(dplyr)
    biblioteca(tidyr)

    Convertir la columna de Fecha a formato de fecha

    mydata$Fecha <- as.Date(mydata$Fecha)

    Agrupar los datos por Id y Outcome, y resumir para obtener la fecha más temprana para cada grupo

    new_data <- mydata %>%
    group_by(Id, Outcome) %>%
    summarize(min_date = min(Fecha)) %>%
    ungroup() %>%

    Agrega una columna con el número de fase (CR1, Recaída1, CR2, etc.)

    mutate(phase = paste0(Outcome, row_number())) %>%

    Pivot the data to get the desired format

    pivot_wider(names_from = phase, values_from = min_date)

    Renombrar los nombres de columna para que coincidan con el resultado deseado

    colnames(new_data)[-1] <- c(“CR1”, “Recaída1”, “CR2”, “Recaída2”)

    Ver el resultado final

    new_data
    “`
    Esto debe proporcionar el resultado deseado como se describe en la pregunta.

Comments are closed.