2016-05-18

Convertir de formato largo a ancho con la función unstack en R

Title

Problema

Deseamos transformar un data frame de formato largo a ancho. Partimos del siguiente data frame:

        name numbers      value
1  firstName       1 -0.3016990
2  firstName       2  0.4782982
3  firstName       3 -0.3274221
4  firstName       4  0.8950889
5 secondName       1 -1.3476795
6 secondName       2 -0.4671124
7 secondName       3 -1.0883609
8 secondName       4  1.8702156

Y queremos llegar a este otra. Con name como nombres de filas, cuatro columnas basadas en numbers y como valores, values.

                  X1         X2         X3        X4
firstName  -0.301699  0.4782982 -0.3274221 0.8950889
secondName -1.347680 -0.4671124 -1.0883609 1.8702156

  • Datos originales
  • dat1 <- structure(list(name = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
    2L), .Label = c("firstName", "secondName"), class = "factor"), 
        numbers = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), value = c(-0.301698990300544, 
        0.47829821507312, -0.327422119821659, 0.895088877410118, 
        -1.3476795169412, -0.467112422933039, -1.08836089961649, 
        1.87021564288651)), .Names = c("name", "numbers", "value"
    ), row.names = c(NA, -8L), class = "data.frame")
    

    Solución

  • Paquete base
  • Empleamos la función unstack para transformar de formato largo a ancho. En el primer argumento, indicamos el data frame, en el argumento form una fórmula, a la izquierda de ~ el vector que deseamos desapilar —unstack— (value) y a la derecha los grupos que queremos crear (numbers). Finalmente, renombramos los nombres de las filas.

    df <- unstack(dat1, form = value ~ numbers)
    rownames(df) <- unique(dat1$name)
    df
    
                      X1         X2         X3        X4
    firstName  -0.301699  0.4782982 -0.3274221 0.8950889
    secondName -1.347680 -0.4671124 -1.0883609 1.8702156
    

    Entradas relacionadas

    Referencias

    No hay comentarios:

    Publicar un comentario

    Nube de datos