Я пишу функцию, которая примет самое последнее наблюдение и добавит его к значениям предыдущих дней, умноженным на определенную долю предыдущих наблюдений.Ниже приведена версия, которая использует только одно преобразование и работает:
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
принимает значения запаздывания для строк, когда я стремлюсь к столбцам.Что структурно неправильно в моей функции, которая заставляет ее не возвращать запаздывание значений столбца?