我想为数据框中的列创建多个值范围的滞后变量。我的代码可以成功执行我想要的操作,但无法根据我的需要进行扩展(数百次迭代)
我的下面的代码成功地完成了我想要的操作,但无法根据我的需要进行扩展(数百次迭代)
Lake_Lag <- Lake_Champlain_long.term_monitoring_1992_2016 %>%
group_by(StationID,Test) %>%
arrange(StationID,Test,VisitDate) %>%
mutate(lag.Result1 = dplyr::lag(Result, n = 1, default = NA))%>%
mutate(lag.Result5 = dplyr::lag(Result, n = 5, default = NA))%>%
mutate(lag.Result10 = dplyr::lag(Result, n = 10, default = NA))%>%
mutate(lag.Result15 = dplyr::lag(Result, n = 15, default = NA))%>%
mutate(lag.Result20 = dplyr::lag(Result, n = 20, default = NA))
Run Code Online (Sandbox Code Playgroud)
我希望能够使用列表 c(1,5,10,15,20) 或范围 1:150 为我的数据框创建滞后变量。
bsc*_*idr 11
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))
}
Run Code Online (Sandbox Code Playgroud)
当使用包中的或等函数时,这是一种动态编写,等sym(new_col_name) :=
的方式。lag_result_1 =
lag_result_2 =
mutate()
summarize()
dplyr
归档时间: |
|
查看次数: |
11803 次 |
最近记录: |