【问题标题】:Start a week from given day and get week number in R从给定日期开始一周并在 R 中获取周数
【发布时间】:2022-01-16 18:03:11
【问题描述】:

让我们有一个日期序列,

df  = data.frame(date = seq(as.Date('2022-01-01'),as.Date('2022-01-31'),by = 1))

我想从 星期二 开始一周,然后剪切日期以创建新列 week 给出周数。所需的输出是,

date           week
1  2022-01-01    1
2  2022-01-02    1
3  2022-01-03    1
4  2022-01-04    2
5  2022-01-05    2

同样,如果我想从星期三开始这一周,预期的输出是,

date           week
1  2022-01-01    1
2  2022-01-02    1
3  2022-01-03    1
4  2022-01-04    1
5  2022-01-05    2
6  2022-01-06    2

我怎样才能完成这项工作?

如果一周从星期一开始,我会使用,

df%>% mutate(week = cut.Date(df$date, breaks = "1 week", labels = FALSE)) 
        date week
1  2022-01-01    1
2  2022-01-02    1
3  2022-01-03    2
4  2022-01-04    2
5  2022-01-05    2

感谢您的帮助...

【问题讨论】:

    标签: r date lubridate week-number


    【解决方案1】:

    我们可以在floor_date 中指定week_startweek_start - 1 将是Monday7 将是Sunday

    f1 <- function(dates, wk_start = 1) {
        new <- lubridate::floor_date(dates, 'week', week_start = wk_start)
        match(new, unique(new))
    }
    

    -检查

    > library(dplyr)
    > df %>%
    +    mutate(week = f1(date, wk_start = 1)) %>%
    +    head
            date week
    1 2022-01-01    1
    2 2022-01-02    1
    3 2022-01-03    2
    4 2022-01-04    2
    5 2022-01-05    2
    6 2022-01-06    2
    > df %>%
    +    mutate(week = f1(date, wk_start = 2)) %>%
    +    head
            date week
    1 2022-01-01    1
    2 2022-01-02    1
    3 2022-01-03    1
    4 2022-01-04    2
    5 2022-01-05    2
    6 2022-01-06    2
    > df %>%
    +    mutate(week = f1(date, wk_start = 3)) %>%
    +    head
            date week
    1 2022-01-01    1
    2 2022-01-02    1
    3 2022-01-03    1
    4 2022-01-04    1
    5 2022-01-05    2
    6 2022-01-06    2
    

    【讨论】:

      猜你喜欢
      • 2022-06-29
      • 2010-11-19
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多