Данные
df = data.frame(year = 1:4, replicate(2,sample(0:20,20,rep=TRUE)))
col = c("R_D","Returns" )
colnames(df)[2:3] <- col
Вот метод с использованием агрегата
Сводка по R_D по годам
aggregate(df[, c("R_D")] , df["year"], FUN = function(x) c(summary(x), sum = sum(x), sd = sd(x)))
Сводка по доходам по годам
aggregate(df[, c("Returns")] , df["year"], FUN = function(x) c(summary(x), sum = sum(x), sd = sd(x)))
Edit1
df1 = aggregate(x= df[, c("R_D","Returns")] , df["year"], FUN = function(x) c(summary(x), sum = sum(x), sd = sd(x)))
R_D = as.data.frame(cbind(Year = df1$year, df1$R_D))
Returns = as.data.frame(cbind(Year = df1$year, df1$Returns))