程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了根据连续日期增加计数器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决根据连续日期增加计数器?

开发过程中遇到根据连续日期增加计数器的问题如何解决?下面主要结合日常开发的经验,给出你关于根据连续日期增加计数器的解决方法建议,希望对你解决根据连续日期增加计数器有所启发或帮助;

我有一个包含多个站点、日期和排放量的洪水表,我正在尝试确定每次洪水的日期。洪水可以持续几天,所以我想创建一个 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,请注明来意。
标签: