【发布时间】:2021-06-13 09:54:11
【问题描述】:
假设我有一组日期存储在df$diag:
> df
diag
1 2017-01-02
2 2017-01-02
3 2017-01-05
4 2017-01-06
5 2017-01-09
6 2017-01-18
我想创建一个新的协变量 df$week,它从星期一开始计算连续周数 2017-01-02,如 yyyy-mm-dd,其中 2017-01-02 对应于 df$week==1。对于在2017-01-02 和2020-12-31 之间经过的每个星期一,df$week 应该增加 1。
> df
diag week
1 2017-01-02 1
2 2017-01-02 1
3 2017-01-05 1
4 2017-01-06 1
5 2017-01-09 2
6 2017-01-18 3
我试过了
mutate(df, week = 1 + round(as.numeric(difftime(strptime(diag, format = "%Y-%m-%d"),
strptime("02.01.2017", format = "%d.%m.%Y"),
units="weeks"), digits = 0)))
这给了
diag week
1 2017-01-02 1
2 2017-01-02 1
3 2017-01-05 1
4 2017-01-06 2
5 2017-01-09 2
6 2017-01-18 3
但是,星期五2017-01-06 应该正确属于df$week==1,而星期一2017-01-09 应该继续属于df$week==2。
我正在dplyr寻找解决方案。
数据
df <- structure(list(diag = c("2017-01-02", "2017-01-02", "2017-01-05",
"2017-01-06", "2017-01-09", "2017-01-18")), class = "data.frame", row.names = c(NA,
-6L))
【问题讨论】:
标签: r dataframe time dplyr lubridate