2016-08-24

Crear una nueva columna incremental basándonos en otra en R

Title

Problema

Partimos del siguiente data frame:

  Name Grade
1 John     C
2 John    C+
3 John     C
4 John     B
5 John     A
6 John    A+
7  Kat     B
8  Kat     C
9  Kat     B

Queremos añadir una nueva columna, months, que comience con 3 y continúe con sus múltiplos.

  • Datos originales
  • df <- structure(list(Name = c("John", "John", "John", "John", "John", 
    "John", "Kat", "Kat", "Kat"), Grade = c("C", "C+", "C", "B", 
    "A", "A+", "B", "C", "B")), .Names = c("Name", "Grade"), class = "data.frame", row.names = c(NA, 
    -9L))
    

    Solución

    • Paquete base
    • Usando seq con ave, y 1:nrow(df) en lugar de ff$Name para evitar un vector de tipo carácter como resultado.

      df$months <- ave(1:nrow(df), df$Name, FUN = seq)*3
      
       Name Grade months
      1 John     C      3
      2 John    C+      6
      3 John     C      9
      4 John     B     12
      5 John     A     15
      6 John    A+     18
      7  Kat     B      3
      8  Kat     C      6
      9  Kat     B      9
      
    • dplyr
    • library(dplyr)
      df %>% group_by(Name) %>% mutate(Months=3*seq(n()))
      
    • data.table
    • library(data.table)
      setDT(df)[, Months := 3* seq_len(.N) , by = Name]
      

    Referencias

    No hay comentarios:

    Publicar un comentario

    Nube de datos