我想为数据框中的一列创建多个滞后变量,以获取一系列值。我的代码可以成功完成我想做的事,但不能满足我的需要(数百次迭代)
下面有我的代码,可以成功完成我想做的事,但不能满足我的需要(数百次迭代)
str
我希望能够使用列表c(1,5,10,15,20)或范围1:150为数据框创建滞后变量。
答案 0 :(得分:0)
我们可以使用shift
中的data.table
,它可以为n
取多个值。根据{{1}}
n-非负整数向量,表示领先或落后于输入的偏移量。要创建多个前导/滞后向量,请为n提供多个值
通过?shift
中的“ StationID”,“测试”,“ VisitDate”将“ data.frame”转换为“ data.table”(setDT
),order
,并按“ StationID”,“测试”),以i
作为值的向量,获取“结果”的lag
(type
的默认shift
为“滞后”),并将输出分配(n
到由(:=
创建)的列名称向量
paste0
注意:显示了一种非常有效的解决方案
答案 1 :(得分:0)
这是一种利用dplyr
软件包中的rlang
中包含的“整洁的评估助手”的方法。
基本思想是在mutate()
中创建一个新列,其名称基于for循环提供的字符串。
library(dplyr)
grouped_data <- Lake_Champlain_long.term_monitoring_1992_2016 %>%
group_by(StationID,Test) %>%
arrange(StationID,Test,VisitDate)
for (lag_size in c(1, 5, 10, 15, 20)) {
new_col_name <- paste0("lag_result_", lag_size)
grouped_data <- grouped_data %>%
mutate(!!sym(new_col_name) := lag(Result, n = lag_size, default = NA))
}
在使用{{1}中的sym(new_col_name) :=
或lag_result_1 =
之类的功能时,lag_result_2 =
是一种动态写入mutate()
,summarize()
等的方式。 }包。