大佬教程收集整理的这篇文章主要介绍了根据连续日期增加计数器,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含多个站点、日期和排放量的洪水表,我正在尝试确定每次洪水的日期。洪水可以持续几天,所以我想创建一个 ID 来对洪水进行编号,当日期与前一行连续时我会有相同的数字,如果它不连续,ID 将是前一个 + 1 . Diffdays
列计算当前行与前一行之间的天数。
我的数据如下所示:
Station Date Diffdays discharge Desired counter
Y6042010 1926-11-19 NA 89 1
Y6042010 1928-10-22 703 100 2
Y6042010 1928-10-23 1 115 2
W2022030 2000-04-03 NA 12 3
W2022030 2000-04-04 1 16 3
W2022030 2001-11-13 588 14 4
有什么想法或建议吗?我尝试了几件事,但找不到有效的方法。下面的代码是我认为最接近的代码,但出现错误:
Flood <- Flood %>%
group_by(Station) %>%
mutate(Flood_counter = ifelse(Diffdays != 1,(Flood_counter - 1) + 1,Flood_counter - 1))
使用当前日期不是前一天后一天(或没有前一天)的条件构造一个逻辑向量。然后对向量做一个累积求和。
tibble(Date = as.Date(c("1926-11-19","1928-10-22","1928-10-23","2000-04-03","2000-04-04","2001-11-13"))) %>%
mutate(
first_one = seq_along(DatE) == 1,sequential = Date == dplyr::lag(DatE) + 1,id = cumsum(first_one | !sequential)
)
结果
# A tibble: 6 x 3
Date sequential id
<date> <lgl> <dbl>
1 1926-11-19 TRUE 1
2 1928-10-22 falSE 2
3 1928-10-23 TRUE 2
4 2000-04-03 falSE 3
5 2000-04-04 TRUE 3
6 2001-11-13 falSE 4
编辑:包含 group_by
将导致后续 @H_474_3@mutate 将行的每个子集视为单独的数据集,为每个组重新开始计数。有关更多详细信息,请参阅 R for Data Science (https://r4ds.had.co.nz/transform.html#grouped-mutates-and-filters)
tibble(Date = as.Date(c("1926-11-19","2001-11-13")),station = c("A","A","B","B")) %>%
group_by(station) %>%
mutate(
first_one = seq_along(DatE) == 1,flood_counter = cumsum(first_one | !sequential)
)
结果
# A tibble: 6 x 5
# Groups: station [2]
Date station first_one sequential flood_counter
<date> <chr> <lgl> <lgl> <int>
1 1926-11-19 A TRUE NA 1
2 1928-10-22 A falSE falSE 2
3 1928-10-23 A falSE TRUE 2
4 2000-04-03 B TRUE NA 1
5 2000-04-04 B falSE TRUE 1
6 2001-11-13 B falSE falSE 2
以上是大佬教程为你收集整理的根据连续日期增加计数器全部内容,希望文章能够帮你解决根据连续日期增加计数器所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。