【问题标题】:Filter date column starting from sunday从星期日开始过滤日期列
【发布时间】:2020-08-03 01:15:33
【问题描述】:

我有一个包含如下日期列的数据框:

library(tidyverse)

df <- data.frame(
                id = c(1, 2, 4, 65, 77, 5, 4),
              date = c("2020-04-18", "2020-04-20", "2020-04-01", "2020-04-19",
                       "2020-04-02", "2020-04-01", "2020-04-20")
      ) %>% mutate(date = as.Date(date))

我想系统地过滤包含上周日之前的元素的日期列。

今天是2020-04-20,是星期一。 第一个星期日是2020-04-19

last_sunday <- as.Date(`2020-04-19`)

df %>% filter(date <= last_sunday)

  id       date
1  1 2020-04-18
2  4 2020-04-01
3 65 2020-04-19
4 77 2020-04-02
5  5 2020-04-01

如何以编程方式定义变量“last_sunday”。

【问题讨论】:

    标签: r dplyr tidyverse lubridate


    【解决方案1】:

    使用lubridate

    previous_sunday <- lubridate::floor_date(Sys.Date(), "week")
    
    previous_sunday
    [1] "2020-04-19"
    
    df %>% filter(date <= previous_sunday)
      id       date
    1  1 2020-04-18
    2  4 2020-04-01
    3 65 2020-04-19
    4 77 2020-04-02
    5  5 2020-04-01
    

    【讨论】:

      【解决方案2】:

      一个选项可能是:

      df %>%
       filter(date <= min(date[as.POSIXlt(date)$wday == 0]))
      
        id       date
      1  1 2020-04-18
      2  4 2020-04-01
      3 65 2020-04-19
      4 77 2020-04-02
      5  5 2020-04-01
      

      【讨论】:

        猜你喜欢
        • 2020-07-02
        • 1970-01-01
        • 1970-01-01
        • 2018-02-05
        • 2017-07-19
        • 2023-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多