Problema
Deseamos añadir dos columnas con el mínimo y máximo de la columna old.var para cada grupo de la columna id: 1, 2 y 3.
id old.var
1 1 1
2 1 2
3 1 3
4 2 5
5 2 7
6 2 9
7 2 11
8 3 3
9 3 4
df <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L), old.var = c(1L,
2L, 3L, 5L, 7L, 9L, 11L, 3L, 4L)), .Names = c("id", "old.var"
), class = "data.frame", row.names = c(NA, -9L))
Solución
df$min.var <- ave(df$old.var, df$id, FUN = min)
df$max.var <- ave(df$old.var, df$id, FUN = max)
library(dplyr)
df %>%
group_by(id) %>%
mutate(min.var = min(old.var), max.var = max(old.var))
id old.var min.var max.var
1 1 1 1 3
2 1 2 1 3
3 1 3 1 3
4 2 5 5 11
5 2 7 5 11
6 2 9 5 11
7 2 11 5 11
8 3 3 3 4
9 3 4 3 4
Referencias