使用double for循环创建新变量的函数

时间:2019-07-04 18:36:17

标签: r

我想编写一个函数,该函数根据现有变量创建一组变量。

我对R还是比较陌生,并试图重新创建我在VBA中拥有的功能。

称为“衰减”的函数应通过在变量“ var”上应用不同的衰减参数来创建一组变量,并将其保存在数据帧“数据”中。

它应该创建一个由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 :(得分:0)

是每周时间序列数据。我一直在使用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

输出是通过将衰减函数应用于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,例如当r = 5时为var5,当r = 10时为var10,等等。