为日期范围内的每一天添加参考
Add a reference for each day in a date range
**** 已更新,因为我错过了一些有价值的信息,即日期记录在数据集中不是唯一的。****
我敢肯定这很简单,但如果不手动查找 table 各个日期和参考文献,我无法弄清楚如何做到这一点。
我有 table 个日期 (y/m/d) 和几个日期范围。
我的约会对象是这样的:
Date
2022/4/11
2022/4/12
2022/4/13
2022/4/13
2022/4/13
2022/4/13
2022/4/13
2022/4/14
2022/4/14
2022/4/14
2022/4/15
2022/4/16
2022/4/16
2022/4/16
我的日期范围是这样的:
Start.date
Completed.date
2022/4/13
2022/4/16
如何添加一列来显示日期系列?我的输出应该是这样的:
Date
Date.number
2022/4/11
2022/4/12
2022/4/13
1
2022/4/13
1
2022/4/13
1
2022/4/13
1
2022/4/13
1
2022/4/14
2
2022/4/14
2
2022/4/14
2
2022/4/15
3
2022/4/16
4
2022/4/16
4
2022/4/16
4
2022/4/17
2022/4/17
2022/4/18
非常感谢您的帮助。
table 的代码:
Date.range <- structure(list(Start.date = "2022/4/13", Completed.date = "2022/4/16"), class = "data.frame", row.names = c(NA,-1L))
Date <- structure(list(Date = c("2022/4/11", "2022/4/12", "2022/4/13",
"2022/4/14", "2022/4/14","2022/4/14","2022/4/15", "2022/4/16","2022/4/16","2022/4/16",
"2022/4/17","2022/4/17","2022/4/18")), class = "data.frame", row.names = c(NA,-6L))
可能的解决方案:
library(dplyr)
library(lubridate)
Date.range <- structure(list(Start.date = "2022/4/13", Completed.date = "2022/4/16"), class = "data.frame", row.names = c(NA,-1L))
Date <- data.frame(
Date = c("2022/4/11","2022/4/12","2022/4/13","2022/4/13",
"2022/4/13","2022/4/13","2022/4/13","2022/4/14",
"2022/4/14","2022/4/14","2022/4/15","2022/4/16",
"2022/4/16","2022/4/16"))
Date %>%
mutate(Day.number = ymd(Date) >= ymd(Date.range$Start.date) & ymd(Date) <= ymd(Date.range$Completed.date)) %>%
group_by(Date) %>%
mutate(Day.number = if_else(Day.number, cur_group_id(), NA_integer_)) %>%
ungroup %>%
mutate(Day.number = Day.number - min(Day.number, na.rm = T) + 1)
#> # A tibble: 14 × 2
#> Date Day.number
#> <chr> <dbl>
#> 1 2022/4/11 NA
#> 2 2022/4/12 NA
#> 3 2022/4/13 1
#> 4 2022/4/13 1
#> 5 2022/4/13 1
#> 6 2022/4/13 1
#> 7 2022/4/13 1
#> 8 2022/4/14 2
#> 9 2022/4/14 2
#> 10 2022/4/14 2
#> 11 2022/4/15 3
#> 12 2022/4/16 4
#> 13 2022/4/16 4
#> 14 2022/4/16 4
**** 已更新,因为我错过了一些有价值的信息,即日期记录在数据集中不是唯一的。****
我敢肯定这很简单,但如果不手动查找 table 各个日期和参考文献,我无法弄清楚如何做到这一点。
我有 table 个日期 (y/m/d) 和几个日期范围。
我的约会对象是这样的:
Date |
---|
2022/4/11 |
2022/4/12 |
2022/4/13 |
2022/4/13 |
2022/4/13 |
2022/4/13 |
2022/4/13 |
2022/4/14 |
2022/4/14 |
2022/4/14 |
2022/4/15 |
2022/4/16 |
2022/4/16 |
2022/4/16 |
我的日期范围是这样的:
Start.date | Completed.date |
---|---|
2022/4/13 | 2022/4/16 |
如何添加一列来显示日期系列?我的输出应该是这样的:
Date | Date.number |
---|---|
2022/4/11 | |
2022/4/12 | |
2022/4/13 | 1 |
2022/4/13 | 1 |
2022/4/13 | 1 |
2022/4/13 | 1 |
2022/4/13 | 1 |
2022/4/14 | 2 |
2022/4/14 | 2 |
2022/4/14 | 2 |
2022/4/15 | 3 |
2022/4/16 | 4 |
2022/4/16 | 4 |
2022/4/16 | 4 |
2022/4/17 | |
2022/4/17 | |
2022/4/18 |
非常感谢您的帮助。
table 的代码:
Date.range <- structure(list(Start.date = "2022/4/13", Completed.date = "2022/4/16"), class = "data.frame", row.names = c(NA,-1L))
Date <- structure(list(Date = c("2022/4/11", "2022/4/12", "2022/4/13",
"2022/4/14", "2022/4/14","2022/4/14","2022/4/15", "2022/4/16","2022/4/16","2022/4/16",
"2022/4/17","2022/4/17","2022/4/18")), class = "data.frame", row.names = c(NA,-6L))
可能的解决方案:
library(dplyr)
library(lubridate)
Date.range <- structure(list(Start.date = "2022/4/13", Completed.date = "2022/4/16"), class = "data.frame", row.names = c(NA,-1L))
Date <- data.frame(
Date = c("2022/4/11","2022/4/12","2022/4/13","2022/4/13",
"2022/4/13","2022/4/13","2022/4/13","2022/4/14",
"2022/4/14","2022/4/14","2022/4/15","2022/4/16",
"2022/4/16","2022/4/16"))
Date %>%
mutate(Day.number = ymd(Date) >= ymd(Date.range$Start.date) & ymd(Date) <= ymd(Date.range$Completed.date)) %>%
group_by(Date) %>%
mutate(Day.number = if_else(Day.number, cur_group_id(), NA_integer_)) %>%
ungroup %>%
mutate(Day.number = Day.number - min(Day.number, na.rm = T) + 1)
#> # A tibble: 14 × 2
#> Date Day.number
#> <chr> <dbl>
#> 1 2022/4/11 NA
#> 2 2022/4/12 NA
#> 3 2022/4/13 1
#> 4 2022/4/13 1
#> 5 2022/4/13 1
#> 6 2022/4/13 1
#> 7 2022/4/13 1
#> 8 2022/4/14 2
#> 9 2022/4/14 2
#> 10 2022/4/14 2
#> 11 2022/4/15 3
#> 12 2022/4/16 4
#> 13 2022/4/16 4
#> 14 2022/4/16 4