Чтобы создать новый столбец в кадре данных с именем, также созданным функцией, выполните что-то вроде следующего.
lag_decay_gen <- function(data, col, lag_val, decay_val){
values <- data[[col]]
temp <- dplyr::lag(values, n = lag_val*7, default = 0)
temp <- temp + dplyr::lag(temp)*decay_val
new_col <- paste(col, lag_val, decay_val, sep = "_")
data[[new_col]] <- temp
data
}
lag_decay_all <- function(data, cols, lag_val, decay_val){
for(col in cols) {
data <- lag_decay_gen(data, col, lag_val, decay_val)
}
data
}
Теперь протестируйте функции. Для этого я буду использовать встроенный набор данных iris
. Во-первых, чтобы передать только один столбец name .
df1 <- iris[1:2]
new_df1 <- lag_decay_gen(df1, "Sepal.Length", 1, 0.5)
head(new_df1)
# Sepal.Length Sepal.Width Sepal.Length_1_0.5
#1 5.1 3.5 NA
#2 4.9 3.0 0
#3 4.7 3.2 0
#4 4.6 3.1 0
#5 5.0 3.6 0
#6 5.4 3.9 0
и передать несколько имен столбцов одновременно:
names_cols <- names(df1)
lag_decay_all(iris[1:2], names_cols, 1, 0.5)
Обратите внимание, что функция lag_decay_all
также может использоваться для вычисления новых столбцов, если это только один столбец.