Мы можем использовать cummin
library(dplyr)
df1 %>%
group_by(cyl) %>%
mutate(min_mpg = cummin(mpg))
# A tibble: 8 x 4
# Groups: cyl [2]
# day cyl mpg min_mpg
# <int> <int> <dbl> <dbl>
#1 1 4 34.4 34.4
#2 2 4 21.3 21.3
#3 3 4 23.3 21.3
#4 4 4 25 21.3
#5 1 3 23 23
#6 2 3 27 23
#7 3 3 18.3 18.3
#8 4 3 17.3 17.3
В base R
мы можем использовать ave
df1$min_mpg <- with(df1, ave(mpg, cyl, FUN = cummin))
Или используя data.table
library(data.table)
setDT(df1)[, min_mpg := cummin(mpg), by = cyl][]
данные
df1 <- structure(list(day = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), cyl = c(4L,
4L, 4L, 4L, 3L, 3L, 3L, 3L), mpg = c(34.4, 21.3, 23.3, 25, 23,
27, 18.3, 17.3)), class = "data.frame", row.names = c(NA, -8L
))