我正在编写一个函数,该函数将获取最新的观察值并将其添加到前几天的值乘以先前观察值的指定份额。以下是仅使用一种转换即可工作的版本:
df1<- data.frame(var1=rnorm(10,3,2), var2= rnorm(10, 4, 3))
df1$carryover<- lag(df1$var1, 1, default = 0)*(.5) + df1$var1
>df1
var1 var2 carryover
1 3.2894474 2.0839128 3.2894474
2 3.6059389 7.8880658 5.2506625
3 -1.4274057 6.2763882 0.3755637
4 3.8531253 3.2653448 3.1394225
我的函数尝试在多个不同的份额上执行相同的操作,如下所示:
carryover<- function(x){
result_df<- data.frame(x)
xnames<- names(x)
for (i in 1:7){
result_column<- lag(x, 1, default = 0)*(i/10) + x
result_column_name<- paste(xnames, i, sep= "_")
result_df[result_column_name] <- result_column
}
return(result_df)
}
当我运行列时,当我运行carryover(df1)
时,df$var1
在所有迭代中都保持不变,而df1$var2
在行中采用滞后值。我的函数在结构上有什么错,导致它不返回滞后于列值?
答案 0 :(得分:0)
使用来自Stackoverflow的反馈进行了一些处理,并提出了以下解决方案,在较大的函数中定义了tsconfig.json
函数,然后将carryover
与apply
一起使用来计算按列:
MARGIN=2