Я новичок (я sh) в R и ищу помощь с вопросом. Я много раз искал в stackoverflow аналогичный вопрос, но вполне возможно, что я искал, используя неправильные слова.
То, что я хотел бы сделать, это в простых терминах, сделать уравнение последовательно по строкам с трубы dplyr, такие, что результат в одной строке зависит от значения в строке перед ним.
Для целей этого обсуждения я создал образец фрейма данных (именованный, пример):
> sample
# A tibble: 10 x 4
year variable variable_growth_rates other_growth_rates
<dbl> <dbl> <dbl> <dbl>
1 2010 20000 NA NA
2 2011 23450 0.173 0.15
3 2012 25110 0.0708 0.12
4 2013 25350 0.00956 0.105
5 2014 24920 -0.0170 0.075
6 2015 25010 0.00361 0.05
7 2016 NA NA 0.025
8 2017 NA NA 0.032
9 2018 NA NA 0.041
10 2019 NA NA 0.071
Я хочу применить темпы роста в other_growth_rates к переменной столбца только за последний год данных, сохраняя исторические данные. Я пробовал циклы, применял и свою собственную функцию, но я подозреваю, что мои навыки с ними ужасны, поэтому я просто не могу заставить их работать.
Я могу сделать длинную форму:
##### Append Growth rates from variable other_growth_rates to our historical data in variable
sample_rvsd <- sample %>%
mutate(variable_rvsd = ifelse(!is.na(variable),
variable, lag(variable)*(1+other_growth_rates))) %>%
mutate(variable_rvsd = ifelse(!is.na(variable), variable, lag(variable)*(1+other_growth_rates))) %>%
mutate(variable_rvsd = ifelse(!is.na(variable), variable, lag(variable)*(1+other_growth_rates))) %>%
mutate(variable_rvsd = ifelse(!is.na(variable), variable, lag(variable)*(1+other_growth_rates)))
Это хорошо, если есть только несколько лет и одна переменная, но мне нужно сделать это с несколькими переменными и более чем на десять с лишним лет. Это также проблема, с которой я часто сталкиваюсь, поэтому я вижу, что мой код запутывается в спешке.
Я попытался написать функцию, которая, по моему мнению, была бы оптимальной (поскольку я должен делать это часто) , Опять же, мои навыки не велики:
Напишите функцию append_growth
# Function
append_growth <- function(x, y) {
for (i in seq_along(x)) {
x_new <- ifelse(!is.na(x), x, lag(x) * y)
}
}
##### Apply growth rates function
sample_rvsd_fail <- sample %>%
mutate(variable_rvsd = append_growth(variable, other_growth_rates))
Любая помощь приветствуется.