【发布时间】:2020-08-04 07:59:11
【问题描述】:
我正在研究干旱期数据的夏季时间序列,并试图确定各个时期。我的问题是我当前使用的代码无法识别一年何时发生变化,因此它为夏末和明年夏初分配了相同的 id。
这是我拥有的数据的简化版本。
myData <- tibble(series = rep("FS",21),
date = c("2016-10-26","2016-10-27","2016-10-28","2016-10-29","2016-10-30","2016-10-31","2017-05-01","2017-05-02","2017-05-03","2017-05-04","2017-05-05","2017-05-06","2017-05-07","2017-05-08","2017-05-09","2017-05-10","2017-05-11","2017-05-12","2017-05-13","2017-05-14","2017-05-15"),
year = c(rep(2016,6),rep(2017,15)),
day_status = c(rep("normal",3),rep("drought",16),rep("normal",2)))
> myData
# A tibble: 21 x 4
series date year day_status
<chr> <chr> <dbl> <chr>
1 FS 2016-10-26 2016 normal
2 FS 2016-10-27 2016 normal
3 FS 2016-10-28 2016 normal
4 FS 2016-10-29 2016 drought
5 FS 2016-10-30 2016 drought
6 FS 2016-10-31 2016 drought
7 FS 2017-05-01 2017 drought
8 FS 2017-05-02 2017 drought
9 FS 2017-05-03 2017 drought
10 FS 2017-05-04 2017 drought
# ... with 11 more rows
我正在寻找的结果是这样的
> myData2
# A tibble: 21 x 5
series date year day_status group
<chr> <chr> <dbl> <chr> <dbl>
1 FS 2016-10-26 2016 normal 1
2 FS 2016-10-27 2016 normal 1
3 FS 2016-10-28 2016 normal 1
4 FS 2016-10-29 2016 drought 2
5 FS 2016-10-30 2016 drought 2
6 FS 2016-10-31 2016 drought 2
7 FS 2017-05-01 2017 drought 3
8 FS 2017-05-02 2017 drought 3
9 FS 2017-05-03 2017 drought 3
10 FS 2017-05-04 2017 drought 3
# ... with 11 more rows
我一直在使用的代码是 myData$group <- with(myData, rep(seq_along(z<-rle(myData$day_status)$lengths),z)),但它将 10 月和 5 月的干旱指定为相同的干旱,但事实并非如此。
我尝试然后使用 dplyr 和 group_by 使该功能当时运行一年
group_by(year) %>%
mutate(group = rep(seq_along(z<-rle(myData$day_status)$lengths),z)) %>%
ungroup() %>%
{. ->> myData}
但这会产生错误错误:列 group 的长度必须为 6(组大小)或 1,而不是 21。我收集到这与group_by 的工作方式有关,但我不完全理解问题所在。
非常感谢任何帮助!
【问题讨论】: