【发布时间】:2022-01-17 07:20:54
【问题描述】:
我最初的询问来自这个问题:Pulling lagged data but only for a particular season in R
这回答了我对特定数据框的问题;但是,现在我有一个大型聚合数据框,需要添加一行代码来说明每个单独的数据集(Lake_name)。
这是我的数据:
SeasonYear change Lake_name
1 winter2020 0.007877245 AlanHenry
2 spring2020 0.058515310 AlanHenry
3 summer2020 0.013850687 AlanHenry
4 fall2020 -0.071774781 AlanHenry
5 winter2021 -0.040268206 AlanHenry
6 spring2021 -0.020803715 AlanHenry
7 summer2021 0.181610974 AlanHenry
8 winter2020 -0.029708916 Amistad
9 spring2020 -0.063310371 Amistad
10 summer2020 -0.054231575 Amistad
11 fall2020 0.016057252 Amistad
12 winter2021 0.011785717 Amistad
13 spring2021 -0.030677687 Amistad
14 summer2021 -0.015691720 Amistad
15 winter2020 -0.011974634 AmonGCarter
16 spring2020 0.168774234 AmonGCarter
17 summer2020 -0.041486735 AmonGCarter
18 fall2020 -0.095134974 AmonGCarter
19 winter2021 -0.030310177 AmonGCarter
20 spring2021 0.033528325 AmonGCarter
我正在尝试构建一个函数,该函数可以消除上一个春天的滞后(参见上一篇文章),但也可以考虑每个湖泊。如果我将它单独分开,我可以做到这一点,但我有一个相当大的数据集,这需要很长时间才能做到。这是我尝试使用的代码(根据我引用的帖子修改):
library(dplyr)
lag_spring <- function(x, y, n = 1) {
data.frame(x = x, season_year = y) %>%
group_by(Lake_name) %>%
tidyr::extract(season_year, into = c("season", "year"), regex = "^(.+?)(\\d{4})$") %>%
group_by(year) %>%
mutate(springmean = x[season == "spring"]) %>%
ungroup() %>%
group_by(season) %>%
mutate(lag = ifelse(!season %in% c("summer", "fall"), lag(springmean, n = n), lag(springmean, n = n - 1))) %>%
ungroup() %>%
pull(lag)
}
我尝试在每个湖中添加 group_by(Lake_name) 来执行此操作,但是当我运行代码时:
data %>% mutate(springlag = lag_spring(change, SeasonYear,n=1),
springlag2 = lag_spring(change, SeasonYear,n=2),
springlag3 = lag_spring(change, SeasonYear,n=3))
我收到此错误:
错误:mutate() 输入弹簧滞后问题。 x 必须按 .data 中的变量分组。 未找到列 Lake_name。 i 输入 springlag 为 lag_spring(change, SeasonYear, n = 1)
有人可以帮助修改我之前获得的代码以获得“springlag”,但在 dplyr 中包含仅在每个单独的湖中执行此操作的行吗?
【问题讨论】: