Вы также можете добиться того же, просто слияния:
df <- data.frame(id = c(1, 1, 2, 2),
t = c(1, 2, 1, 2),
wealth = c(10, 15, 12, 17))
previous <- df
previous[,"t"] <- previous[,"t"] +1
df <- merge(df, previous, by = c("id", "t"), all = TRUE, suffixes = c("_current", "_previous"))
na.omit(df)
id t wealth_current wealth_previous
2 1 2 15 10
5 2 2 17 12