library(tidyverse)
library(imputeTS)
library(zoo)
Использование mutate_at
три раза:
read_delim('dput.df.txt', delim = ' ') %>%
group_by(country_name_iso3) %>%
mutate_at(.vars = c('debt_GDP', 'Top10'),
.funs = list(inter = ~na_interpolation(., option = "spline"))) %>%
mutate_at(.vars = c('debt_GDP_inter', 'Top10_inter'),
.funs = list(sm = ~fitted(smooth.spline(.)))) %>%
mutate_at(.vars = c('debt_GDP_inter_sm', 'Top10_inter_sm'),
.funs = list(rollmean = ~rollmean(., 10, fill = NA)))
Или объединить в одну функцию:
func <- function(x) {
inter = na_interpolation(x, option = 'spline')
sm = fitted(smooth.spline(inter))
rollmean = rollmean(sm, 10, fill = NA)
}
read_delim('dput.df.txt', delim = ' ') %>%
group_by(country_name_iso3) %>%
mutate_at(.vars = c('debt_GDP', 'Top10'), .funs = func)
Построение графика вывода
read_delim('dput.df.txt', delim = ' ') %>%
group_by(country_name_iso3) %>%
mutate_at(.vars = c('debt_GDP', 'Top10'), .funs = func) %>%
ggplot() +
geom_line(aes(year, debt_GDP, color=country))
![enter image description here](https://i.stack.imgur.com/iGXr7.png)