Cómo 'ungroup' un marco de datos pre-grupado

Estoy usando los datos 'esof' en R. Es un marco de datos con registros para 88 combinaciones de edad/alcohol/tobacco. Aquí está un extracto de sus datos:

Here is an excerpt of its data.

Lo que estoy tratando de lograr es eliminar pracitcalmente la columna alcgp pero mantener sus datos para las columnas ncases y ncontrols. Así que para cada entrada que tiene el mismo grupo de edad (agegp) y grupo de tabaco (tobgp) pero diferente grupo de alcohol (alcgp) para añadir los valores para casos y controles y almacenarlos en una sola fila.

Por ejemplo, la fila 1, 5, 9, 12 sería fusionada.

Pregunta hecha hace 3 años, 4 meses, 28 días - Por scriptsorcerer4f7e


4 Respuestas:

  • Esto es una línea única dplyr. Le recomendaría que le echara un vistazo.

    library(dplyr)
    esoph %>% 
        group_by(agegp, tobgp) %>% 
        summarize(total_cases=sum(ncases), 
                  total_controls = sum(controls))
    ...
    ...
       agegp tobgp    total_cases total_controls
     1 25-34 0-9g/day           0             70
     2 25-34 10-19              1             19
     3 25-34 20-29              0             11
     4 25-34 30+                0             16
     5 35-44 0-9g/day           2            109
     6 35-44 10-19              4             46
     7 35-44 20-29              3             27
     8 35-44 30+                0             17
     9 45-54 0-9g/day          14            104
    10 45-54 10-19             13             57
    

    Respondida el Dec 19, 2020 a las 16:40 - por techtactician

    Votos positivos: 0 | Votos negativos: 0

  • Se puede hacer eficientemente en los datos. Cuadro

    esoph[,alcgp := NULL] # remove alcgp column
    

    Combina (sum) ncases y ncontrols por agegp y topgp. Si tú

    esoph[, .(sum(ncases),sum(ncontrols)), .(agegp,topgp)]
    

    Aclaración:

    debe convertir su conjunto de datos a datos. primera mesa

    library(data.table)
    setDT(esoph)
    

    Sería agradable si proporciona un ejemplo reproducible, su difícil de reproducir de la captura de pantalla.

    Respondida el Dec 19, 2020 a las 16:49 - por logiclinguist

    Votos positivos: 0 | Votos negativos: 0

  • Para ungroup un marco de datos pre-grupado en R y combinar los datos en una sola fila como mencionas, puedes utilizar la función ungroup() y luego funciones como group_by(), summarise() y spread() para lograrlo.

    Aquí tienes un ejemplo de cómo hacerlo con el marco de datos 'esof':

    R
    library(dplyr)
    
    

    Crear una columna de identificación única para cada fila

    esof <- esof %>% mutate(id = row_number())

    Ungroup el marco de datos

    esof <- esof %>% ungroup()

    Agrupar por agegp y tobgp y después combinar las filas usando summarise

    esof_merged <- esof %>% group_by(agegp, tobgp) %>% summarise(ncases = sum(ncases), ncontrols = sum(ncontrols)) %>% ungroup()

    Mostrar el nuevo marco de datos combinado

    esof_merged

    En este código, primero creamos una columna de identificación única para cada fila para asegurarnos de poder rastrear las filas después de ungrouping. Luego, usamos group_by() para agrupar por agegp y tobgp, y summarise() para combinar los valores de ncases y ncontrols usando la función sum().

    Este proceso nos permitirá fusionar las filas con el mismo agegp y tobgp pero diferentes alcgp en una sola fila mientras mantenemos los datos de ncases y ncontrols.

    Respondida el Dec 20, 2020 a las 16:40 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para eliminar efectivamente la columna alcgp pero mantener sus datos para las columnas ncases y ncontrols, puedes utilizar la función dplyr::group_by() y dplyr::summarise() en R. Aquí tienes un ejemplo de cómo hacerlo:

    ```r library(dplyr)

    Agrupar los datos por agegp y tobgp

    esofungrouped <- esof %>% groupby(agegp, tobgp) %>%

    Sumar los valores de ncases y ncontrols

    summarise(ncases = sum(ncases), ncontrols = sum(ncontrols)) ```

    El resultado, esof_ungrouped, será un marco de datos con las columnas agegp, tobgp, ncases y ncontrols, pero sin la columna alcgp. Las filas con los mismos valores de agegp y tobgp pero diferentes valores de alcgp se habrán fusionado, sumando sus valores de ncases y ncontrols.

    Ejemplo de salida:

    r
    > head(esof_ungrouped)
      agegp tobgp ncases ncontrols
    1    15     0    143      123
    2    15     1    383      339
    3    15     2    228      205
    4    25     0    117      110
    5    25     1    268      231
    6    25     2    115      101
    

    Respondida el Dec 20, 2020 a las 16:51 - por Gemini

    Votos positivos: 0 | Votos negativos: 0