Encontrar el máximo de funcionamiento por grupo

Necesito encontrar un máximo de ejecución de una variable por grupo usando R. La variable se ordena por tiempo dentro del grupo usando df[order(df$group, df$time),] .

Mi variable tiene algunas NA, pero puedo manejarla reemplazándolas por ceros para este cálculo.

así es como se ve el dataframe df:

 (df <- structure(list(var = c(5L, 2L, 3L, 4L, 0L, 3L, 6L, 4L, 8L, 4L), group = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("a", "b"), class = "factor"), time = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L)), .Names = c("var", "group","time"), class = "data.frame", row.names = c(NA, -10L))) # var group time # 1 5 a 1 # 2 2 a 2 # 3 3 a 3 # 4 4 a 4 # 5 0 a 5 # 6 3 b 1 # 7 6 b 2 # 8 4 b 3 # 9 8 b 4 # 10 4 b 5 

Y quiero un CurMax variable como:

 var | group | time | curMax 5 a 1 5 2 a 2 5 3 a 3 5 4 a 4 5 0 a 5 5 3 b 1 3 6 b 2 6 4 b 3 6 8 b 4 8 4 b 5 8 

Por favor, avíseme si tiene alguna idea de cómo implementarlo en R.

puedes hacerlo así:

 df$curMax <- ave(df$var, df$group, FUN=cummax) 

Podemos probar data.table . Convierta el ‘data.frame’ a ‘data.table’ ( setDT(df1) ), agrupado por ‘group’, obtenemos el cummax de ‘var’ y le asignamos ( := ) una nueva variable (‘curMax’)

 library(data.table) setDT(df1)[, curMax := cummax(var), by = group] 

Como comentó @Michael Chirico, si los datos no están order por ‘tiempo’, podemos hacer eso en la ‘i’

 setDT(df1)[order(time), curMax:=cummax(var), by = group] 

O con dplyr

 library(dplyr) df1 %>% group_by(group) %>% mutate(curMax = cummax(var)) 
Intereting Posts