r - 使用双 for 循环创建新变量的函数
问题描述
我想编写一个基于现有变量创建一组变量的函数。
我对 R 比较陌生,并试图重新创建我在 VBA 中拥有的函数。
名为“decay”的函数应该通过在变量“var”上应用不同的衰减参数来创建一组变量,并将它们保存在数据帧“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
解决方案
它是每周时间序列数据。我一直在使用 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 等。
推荐阅读
- apache - 运行 1k 用户进行压力测试的最佳实践
- typescript - 从深度嵌套的对象结构中提取值
- typescript - nativescript - 您可能需要适当的加载程序来处理此文件类型,目前没有配置加载程序来处理此文件
- firebase - Firebase 在 2 小时后删除数据或拒绝从实时数据库中读取数据 BYE FIREBASE ROLES
- php - Symfony/Doctrine 仅保留更新的对象,其间有回声
- java - MSAL4J 获取 refresh_token 和 access_token 来保存,而不是每次都请求用户许可
- c - 在具有共享内存的 POSIX 中使用未命名信号量时出现信号量死锁
- python - 如何获得sklearn的当前随机种子?
- ios - “在仅 aot 模式下运行时尝试 JIT 编译方法”更新 protobuf-net 后抛出异常
- javascript - 通过在 Typescript 中添加类型断言来更改推理