首页 > 解决方案 > 使用双 for 循环创建新变量的函数

问题描述

我想编写一个基于现有变量创建一组变量的函数。

我对 R 比较陌生,并试图重新创建我在 VBA 中拥有的函数。

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

它应该创建一组 19 个变量,这些变量通过连接现有变量名称“var”和衰减参数来命名,该参数取值 5、10、15、20、25、30....95。

然后值计算为:

 

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

标签: r

解决方案


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


推荐阅读