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

    No hay comentarios:

    Publicar un comentario

    Nube de datos