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.
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
library(dplyr)
df %>% group_by(Name) %>% mutate(Months=3*seq(n()))
library(data.table)
setDT(df)[, Months := 3* seq_len(.N) , by = Name]
Referencias