r - 有条件地在 R 中汇总日期
问题描述
嗨,我正在尝试找出一种有条件地在 R 中汇总日期的方法。
假设我有下表,并且我想使用 Flags 变量汇总日期。标志可以是 1 或 2,并指示可以链接哪些后续日期。
DateStart <- c("2018-01-01", "2018-01-04", "2018-01-05", "2018-01-09", "2018-01-12", "2018-01-20")
DateEnd <- c("2018-01-05", "2018-01-09", "2018-01-12", "2018-01-15", "2018-01-20", "2018-01-21")
IndexRecord <- c(1, NA, NA, NA, NA, NA)
Flag1 <- c(1,1,1,1,1,1)
Flag2 <- c(2,1,1,1,1,1)
Flag3 <- c(1,1,2,1,2,1)
df1 <- data.frame(DateStart = as.Date(DateStart),
DateEnd = as.Date(DateEnd),
IndexRecord = IndexRecord,
Flag1 = Flag1,
Flag2 = Flag2,
Flag3 = Flag3) %>%
arrange(DateStart)
df1
| | DateStart | DateEnd | IndexRecord | Flag1 | Flag2 | Flag3 |
|---|------------|------------|-------------|-------|-------|-------|
| 1 | 2018-01-01 | 2018-01-05 | 1 | 1 | 2 | 1 |
| 2 | 2018-01-04 | 2018-01-09 | NA | 1 | 1 | 1 |
| 3 | 2018-01-05 | 2018-01-12 | NA | 1 | 1 | 2 |
| 4 | 2018-01-09 | 2018-01-15 | NA | 1 | 1 | 1 |
| 5 | 2018-01-12 | 2018-01-20 | NA | 1 | 1 | 2 |
| 6 | 2018-01-20 | 2018-01-21 | NA | 1 | 1 | 1 |
当前期间的值为 1 的标志意味着要使后续行具有有效链接,后续行的 DateStart 必须在当前行的DateEnd之前出现。使用 Flag1 作为感兴趣的列,结果如下所示:
| | DateStart | DateEnd | IndexRecord | Flag1 |
|---|------------|------------|-------------|-------|
| 1 | 2018-01-01 | 2018-01-05 | 1 | 1 |
| 2 | 2018-01-04 | 2018-01-09 | NA | 1 |
| 3 | 2018-01-05 | 2018-01-12 | NA | 1 |
| 4 | 2018-01-09 | 2018-01-15 | NA | 1 |
| 5 | 2018-01-12 | 2018-01-20 | NA | 1 |
当前期间的值为 2 的标志意味着要使后续行具有有效链接,后续行的 DateStart 必须出现在当前行的 DateEnd 上。使用 Flag2 作为感兴趣的列,结果将如下所示:
| | DateStart | DateEnd | IndexRecord | Flag2 |
|---|------------|------------|-------------|-------|
| 1 | 2018-01-01 | 2018-01-05 | 1 | 2 |
| 3 | 2018-01-05 | 2018-01-12 | NA | 1 |
| 4 | 2018-01-09 | 2018-01-15 | NA | 1 |
| 5 | 2018-01-12 | 2018-01-20 | NA | 1 |
更复杂的情况之一可能会出现在 Flag3 中看到的模式,并获得所需的结果:
| | DateStart | DateEnd | IndexRecord | Flag3 |
|---|------------|------------|-------------|-------|
| 1 | 2018-01-01 | 2018-01-05 | 1 | 1 |
| 2 | 2018-01-04 | 2018-01-09 | NA | 1 |
| 3 | 2018-01-05 | 2018-01-12 | NA | 2 |
| 5 | 2018-01-12 | 2018-01-20 | NA | 2 |
| 6 | 2018-01-20 | 2018-01-21 | NA | 1 |
干杯,
Ĵ
编辑:由于这可能不清楚,让我逐步澄清。
标志1。
- 我们看到,在第 1 行中,它在 2018-01-05 结束,Flag1 为 1。
- 这意味着对于要链接到这一集的后续行,下一集的 DateStart 必须出现在第 1 行的 DateEnd 之前。第 2 行满足此条件,因为 2018-01-04 出现在 2018-01-05 之前,因此是有效链接.
- 如果我们查看剩余的行,除了第 6 行之外,所有这些日期都是嵌套的。由于第 5 行的标志 1 为 1,我们无法计算第 6 行,因此表格停在第 5 行。
- 总经过时间是从 2018-01-01 到 2018-01-20。
标志2。
- 第 1 行的 Flag2 等于 2,这意味着只有 2018-01-05 的后续 DateStart 可以链接到此行。因此第 2 行被删除。如果我们继续向下移动,我们会看到第 3 行的 DateStart 为 2018-01-05,因此可以链接到第 1 行。
- 查看剩余的行,它与 Flag1 具有相同的模式,因为从此时起 Flag1 和 Flag2 是相同的。
- 与 Flag1 类似,总经过时间是从 2018-01-01 到 2018-01-20
- 与 Flag1 相比,经过的时间没有差异,但所走的旅程不同。
标志 3。
- 第 1 行和第 2 行的标志 3 与标志 1 中的相同,这意味着此时第 1 行、第 2 行和第 3 行与标志 1 示例相同。
- 但是,第 3 行的 Flag3 为 2。由于第 3 行的 DateEnd 为 2018-01-12,因此只能链接第 5 行,并删除第 4 行。
- 由于第 5 行的 Flag3 为 2,DateEnd 为 2018-01-20,因此第 6 行也可以链接到该集合。
- 这组的总经过时间是从 2018-01-01 到 2018-01-21。
解决方案
推荐阅读
- java - 如何模拟 sun jersey 客户发布电话?
- php - 变量未通过 php 函数更新
- ios - 为什么后退按钮不隐藏在导航控制器中?
- python - 子图之间的 Matplotlib 距离
- swift - 自动保存实时照片
- java - 在 GCP App 引擎上找不到 logback xml 文件异常
- java - “supplyAsync”和“thenAccept”的 CompletableFuture 线程 ID
- java - 如何在运行时动态更新实体字段列设置?
- java - Java:如何在现有文本文件中添加新的字符串行?
- c - 我可以将字符串从二维数组复制到一维数组(数组和指针)