【问题标题】:How do I group consecutive dates within a Vector in R?如何在 R 中的 Vector 中对连续日期进行分组?
【发布时间】:2018-07-17 15:51:08
【问题描述】:

我在下面有一个日期向量;

dates <- c("2018-05-16", "2018-07-20", "2018-06-25", "2018-06-26", "2018-07-21", "2018-07-22", "2018-05-17")

我想将连续的日期组合在一起。这可能吗?

即我想要一组日期“2018-05-16”和“2018-05-17”、“2018-07-20”、“2018-07-21”和“2018-07-22”在另一个组中,最后是“2018-06-25”和“2018-06-26”在另一个组中。

通过在网上做一些研究,我发现我可能不得不使用下面的代码;

dateGroups <- c(NA,diff(as.Date(dates))==1)

但我不确定。

【问题讨论】:

  • 你需要split(dates, cumsum(c(TRUE, diff(as.Date(dates)) == 1)))
  • @akrun 所以你的代码拆分了日期,但不幸的是没有分成连续的组
  • 请将您的帖子更新为预期,以免其他人感到困惑\
  • @akrun 完成!如果仍然没有意义,请告诉我。
  • 请查看发布的解决方案

标签: r date vector


【解决方案1】:

我们需要sort然后进行比较

dates1 <- sort(as.Date(dates))
split(dates1, cumsum(c(TRUE, diff(dates1) != 1)))
#$`1`
#[1] "2018-05-16" "2018-05-17"

#$`2`
#[1] "2018-06-25" "2018-06-26"

#$`3`
#[1] "2018-07-20" "2018-07-21" "2018-07-22"

上面的split变成listvectors。如果我们需要一个带有分组列的data.frame

df1 <- data.frame(dates1, group = cumsum(c(TRUE, diff(dates1) != 1)))

【讨论】:

  • 对不起最后一个问题。是否可以在每个组中取最晚的日期?即第 1 组中的 2018-05-17、第 2 组中的 2018-06-26 和第 3 组中的 2018-07-22?
  • @Jed 当然,library(dplyr);df1 %&gt;% group_by(group) %&gt;% summarise(dates = max(dates1))
猜你喜欢
  • 2018-07-22
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多