У меня была функция, чтобы найти максимальное значение до текущего номера строки.примените специальную функцию к определенному столбцу, по которому можно поместить группу в data.table
dt<- setDT(copy(mtcars),keep.rownames = TRUE)
apply(as.matrix(dt$rn), 1, function(x) {
index = as.numeric(ifelse(match(x, dt$rn) == 1, 2, match(x, dt$rn)))
max(dt[1:index-1,"mpg",with = FALSE])
})
# [1] 21.0 21.0 21.0 22.8 22.8 22.8 22.8 22.8 24.4 24.4 24.4 24.4 24.4 24.4 24.4 24.4 24.4 24.4 32.4 32.4 33.9 33.9 33.9 33.9 33.9 33.9 33.9 33.9 33.9 33.9 33.9
# [32] 33.9
Тем не менее, я хотел бы повторить то же, что и на определенной группе, скажем, «передача». Как мне изменить код. Я чувствую, что это связано с чем-то подобным.
dt[,max:=lapply(.SD,function(x){
index = as.numeric(ifelse(match(x,dt$rn) == 1, 2, match(x, dt$rn)))
return(max(dt[1:index-1,"mpg",with = FALSE]))
}),by = gear,.SDcols = "rn"]
Я чувствую, что может быть что-то не хватает ..
Ваша функция может быть заменена на простое 'cummax (dt $ mpg)' –
@DavidArenburg op отсутствует в parens в '1: index-1', правильно? так что исправление, которое дает мне разницу в одном значении – rawr
@rawr да, я думаю, что вы правы –