У меня есть следующий фрейм данных, называемый DF,
Country Year Var1 Var2
USA 2010 5 3
USA 2011 6 5
USA 2012 NA 8
USA 2013 4 NA
USA 2014 NA 6
USA 2015 6 9
CHN 2010 NA 5
CHN 2011 7 NA
CHN 2012 6 NA
CHN 2013 4 4
CHN 2014 NA 6
CHN 2015 NA 8
EGY 2010 3 NA
EGY 2011 3 5
EGY 2012 3 6
EGY 2013 NA 8
EGY 2014 NA NA
EGY 2015 NA 2
Я хочу взять среднее значение данных за 3 года. Однако, если имеются данные только за два года в пределах определенного трехлетнего интервала, я хочу проигнорировать NA и взять среднее значение за два года. Точно так же, если данные доступны только за один год в пределах определенного трехлетнего интервала, я хочу сохранить эту точку данных как «среднее значение» для этого трехлетнего интервала. По сути, в пределах каждого трехлетнего интервала я хочу брать среднее значение, игнорируя НП.
Я пробовал следующее решение, рекомендованное в: R: Расчет средних значений за 5 лет в данные панели
int<-cut(DF$Year,seq(2010,2016,by=3),right=F)
id<-c("Var1", "Var2")
ag<-aggregate(DF[id],list(DF$Country,int), mean)
Было получено следующее:
Group.1 Group.2 Var1 Var2
CHN [2010,2013) NA NA
EGY [2010,2013) 3 NA
USA [2010,2013) NA 5.333333
CHN [2013,2016) NA 6.000000
EGY [2013,2016) NA NA
USA [2013,2016) NA NA
Но результат, который меня интересует:
Group.1 Group.2 Var1 Var2
CHN [2010,2013) 6.5 5
EGY [2010,2013) 3 5.5
USA [2010,2013) 5.5 5.3
CHN [2013,2016) 4 6
EGY [2013,2016) NA 5
USA [2013,2016) 5 7.5