r:跨行(而不是列)工作的滞后函数

时间:2019-02-10 02:57:08

标签: r function dplyr

我正在编写一个函数,该函数将获取最新的观察值并将其添加到前几天的值乘以先前观察值的指定份额。以下是仅使用一种转换即可工作的版本:

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在行中采用滞后值。我的函数在结构上有什么错,导致它不返回滞后于列值?

1 个答案:

答案 0 :(得分:0)

使用来自Stackoverflow的反馈进行了一些处理,并提出了以下解决方案,在较大的函数中定义了tsconfig.json函数,然后将carryoverapply一起使用来计算按列:

MARGIN=2