Вот базовое решение R с использованием aggregate()
+ cbind()
select_crt <- c("England","Findland")
dfout <- cbind(aggregate(cbind(GDP_growth, R.D_exp, Education_spending)~year,subset(df,country %in% select_crt), FUN = mean),select_crt = toString(select_crt))
или
select_crt <- c("England","Findland")
dfsel <- subset(df,country %in% select_crt)
dfout <- cbind(aggregate(dfsel[-c(1:2)],dfsel[1], FUN = mean), select_crt = toString(select_crt))
, и оба из них дадут вам
> dfout
year GDP_growth R.D_exp Education_spending select_crt
1 2000 2.75 2.05 7.90 England, Findland
2 2001 2.85 2.65 7.95 England, Findland
3 2002 2.95 2.50 8.05 England, Findland
ДАННЫЕ
df <- structure(list(year = c(2000L, 2001L, 2002L, 2000L, 2001L, 2002L,
2000L, 2001L, 2002L), country = c("Australia", "Australia", "Australia",
"England", "England", "England", "Findland", "Findland", "Findland"
), GDP_growth = c(3.4, 2.1, 3, 3.6, 3.5, 3.2, 1.9, 2.2, 2.7),
R.D_exp = c(1.9, 0.9, 0.9, 3.9, 4.6, 4, 0.2, 0.7, 1), Education_spending = c(4.8,
5, 6.2, 7.8, 7.8, 7.9, 8, 8.1, 8.2)), class = "data.frame", row.names = c(NA,
-9L))