R中年度断点的计算
Computation of yearwise breakpoints in R
我有每日降雨数据,我已使用以下代码将其转换为年度累计值
library(tidyverse); library(segmented); library(seas); library(strucchange)
## get mscdata from "seas" packages
data(mscdata)
dat <- (mksub(mscdata, id=1108447))
## generate cumulative sum of rain by year
d2 <- dat %>% group_by(year) %>% mutate(rain_cs = cumsum(rain)) %>% ungroup
然后我想使用 strucchange
计算年度断点。我可以像
那样做一年
y <- subset(d2,year=="1992")$rain_cs
breakpoints(y ~ 1, breaks = 3)$breakpoints
我已经使用breaks = 3
设置了3个断点。现在如何按年动态应用它来估计断点?
您可以 group_by
year
并在 dplyr
1.0.0 中使用 summarise
可以在 summarise
中生成多行:
library(dplyr)
library(strucchange)
d2 %>%
group_by(year) %>%
summarise(breakpoints = breakpoints(rain_cs~1, breaks = 3)$breakpoints)
# year breakpoints
# <int> <dbl>
# 1 1975 73
# 2 1975 237
# 3 1975 301
# 4 1976 83
# 5 1976 166
# 6 1976 297
# 7 1977 98
# 8 1977 239
# 9 1977 311
#10 1978 102
# … with 80 more rows
要获取 3 列的数据,我们可以将输出存储在列表中并使用 unnest_wider
。
d2 %>%
group_by(year) %>%
summarise(breakpoints = list(breakpoints(rain_cs~1,breaks = 3)$breakpoints)) %>%
tidyr::unnest_wider(breakpoints) %>%
tibble::column_to_rownames('year')
我有每日降雨数据,我已使用以下代码将其转换为年度累计值
library(tidyverse); library(segmented); library(seas); library(strucchange)
## get mscdata from "seas" packages
data(mscdata)
dat <- (mksub(mscdata, id=1108447))
## generate cumulative sum of rain by year
d2 <- dat %>% group_by(year) %>% mutate(rain_cs = cumsum(rain)) %>% ungroup
然后我想使用 strucchange
计算年度断点。我可以像
y <- subset(d2,year=="1992")$rain_cs
breakpoints(y ~ 1, breaks = 3)$breakpoints
我已经使用breaks = 3
设置了3个断点。现在如何按年动态应用它来估计断点?
您可以 group_by
year
并在 dplyr
1.0.0 中使用 summarise
可以在 summarise
中生成多行:
library(dplyr)
library(strucchange)
d2 %>%
group_by(year) %>%
summarise(breakpoints = breakpoints(rain_cs~1, breaks = 3)$breakpoints)
# year breakpoints
# <int> <dbl>
# 1 1975 73
# 2 1975 237
# 3 1975 301
# 4 1976 83
# 5 1976 166
# 6 1976 297
# 7 1977 98
# 8 1977 239
# 9 1977 311
#10 1978 102
# … with 80 more rows
要获取 3 列的数据,我们可以将输出存储在列表中并使用 unnest_wider
。
d2 %>%
group_by(year) %>%
summarise(breakpoints = list(breakpoints(rain_cs~1,breaks = 3)$breakpoints)) %>%
tidyr::unnest_wider(breakpoints) %>%
tibble::column_to_rownames('year')