Mostrando entradas con la etiqueta Max. Mostrar todas las entradas
Mostrando entradas con la etiqueta Max. Mostrar todas las entradas

2017-05-26

Convertir de formato largo a ancho con sqldf en R

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 otro. 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 sqldf
  • Empleamos la sintaxis de SQL de sqldf para transformar o pivotar de formato largo a ancho. Empleamos MAX(CASE WHEN.

    library(sqldf)
    sqldf('SELECT name,
          MAX(CASE WHEN numbers = 1 THEN value ELSE NULL END) x1, 
          MAX(CASE WHEN numbers = 2 THEN value ELSE NULL END) x2,
          MAX(CASE WHEN numbers = 3 THEN value ELSE NULL END) x3,
          MAX(CASE WHEN numbers = 4 THEN value ELSE NULL END) x4
          FROM dat1
          GROUP BY name')
    
                      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

    2016-05-30

    Añadir una columna con el min y max por grupo en R

    Title

    Problema

    Deseamos añadir dos columnas con el mínimo y máximo de la columna old.var para cada grupo de la columna id: 1, 2 y 3.

      id old.var
    1  1       1
    2  1       2
    3  1       3
    4  2       5
    5  2       7
    6  2       9
    7  2      11
    8  3       3
    9  3       4
    

  • Datos originales
  • df <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L), old.var = c(1L, 
    2L, 3L, 5L, 7L, 9L, 11L, 3L, 4L)), .Names = c("id", "old.var"
    ), class = "data.frame", row.names = c(NA, -9L))
    

    Solución

  • Paquete base
  • df$min.var <- ave(df$old.var, df$id, FUN = min)
    df$max.var <- ave(df$old.var, df$id, FUN = max)
    
  • Paquete dplyr
  • library(dplyr)
    df %>% 
      group_by(id) %>%
      mutate(min.var = min(old.var), max.var = max(old.var))
    
      id old.var min.var max.var
    1  1       1       1       3
    2  1       2       1       3
    3  1       3       1       3
    4  2       5       5      11
    5  2       7       5      11
    6  2       9       5      11
    7  2      11       5      11
    8  3       3       3       4
    9  3       4       3       4
    

    Referencias

    2016-05-08

    Buscar el mínimo o máximo de una columna basado en una condición en Excel

    Title

    Problema

    Para cada pedido de la siguiente tabla queremos extraer el precio mínimo y el máximo.

    Solución

    Utilizamos las siguientes fórmulas matriciales en las celdas J2 y M2 de nuestro ejemplo, sin las llaves {}, y arrastramos el controlador de relleno hacia abajo. En la barra de fórmulas antes de salir, presionamos Ctrl+Mayús+Entrar para indicar que se trata de una fórmula matricial y Excel las añadirá automáticamente.

  • Mínimo
  • {=MIN(SI(H2=$A$2:$A$18;$C$2:$C$18))}
    
  • Máximo
  • {=MAX(SI(H2=$A$2:$A$18;$C$2:$C$18))}
    

    Entradas relacionadas

    Referencias

    Directrices y ejemplos de fórmulas de matriz

    Nube de datos