Функция для создания новых переменных, используя двойной цикл for - PullRequest
0 голосов
/ 04 июля 2019

Я хотел бы написать функцию, которая создает набор переменных на основе существующей переменной.

Я относительно новичок в R и пытаюсь воссоздать функцию, которая была у меня в VBA.

Функция с именем 'decay' должна создавать набор переменных, применяя различные параметры decay к переменной 'var' и сохраняя их в dataframe 'data'.

Она должна создавать набор из 19 переменных, которые именуются путем объединения существующихимя переменной 'var' и параметр спада, который принимает значения 5,10,15,20,25,30 .... 95.

Тогда значения рассчитываются как:

  • первое значение новой переменной = первое значение существующей переменной 'var'
  • Любое другое последующее значение равно соответствующему значению существующей переменной 'var' + предыдущее значение новой переменной * параметр распада / 100

decay <- function(var, data) {
  for (i in 1:19) {
    paste(data$var, i*5)
    paste(data$var, i*5)[1] <- data$var[1]
    for (j in 1:length(var) - 1) {
      paste(data$var, i*5)[j + 1] <- data$var[j + 1] + paste(data$var, i*5)[j]*i*5
    }
  }
}

Пример вывода:

var var5    var10   var15   var20
100 100 100 100 100
0   5   10  15  20
150 150 151 152 154
20  28  35  43  51
0   1   4   6   10
0   0   0   1   2
50  50  50  50  50
60  63  65  68  70

1 Ответ

0 голосов
/ 07 июля 2019

Это еженедельные данные временных рядов. Я использовал объекты ts и xts. Это упрощенный пример - реальные данные имеют несколько сотен переменных и гораздо более длинные имена переменных, что затрудняет чтение кода.

            var
04/01/2016  100
11/01/2016  0
18/01/2016  150
25/01/2016  20
01/02/2016  0
08/02/2016  0
15/02/2016  50
22/02/2016  60

Выходные данные представляют собой набор переменных, созданных с помощью функции decay для var. Первое значение равно первому значению var, а любое последующее значение является суммой соответствующего значения в var + значение новой переменной предыдущей недели * r / 100, где r - параметр затухания, принимающий значения 5,10,15,20 ... 95. Это можно записать следующим образом:

if t=1
new_var[t] = var[t]
if t>1
new_var[t] = var[t] + new_var[t-1]*r/100

Я просто хотел бы, чтобы имена переменных были конкатенацией или исходным именем переменной (var) и скоростью затухания r, например var5 при r = 5, var10 при r = 10 и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...