使用lubridate和dyplr筛选特定日期的数据集

我正在尝试过滤特定日期的tibble。如果我尝试在该日期的>=和同一日期的<=,该代码将导致返回0行。我已经确定,对于我认为应该为<=的行,是FALSE返回TRUE。下面是一个工作示例。我只对tidyverselubridate的相关回应很感兴趣-请不要发布使用Base R或其他软件包的答案(我知道如何以其他方式解决问题。

数据

library(dplyr)
library(lubridate)

d <- structure(list(Date = structure(c(1572679159,1572703322,1572710363,1572722578,1572727765,1572728767,1572730032),class = c("POSIXct","POSIXt"),tzone = "UTC",label = c(EndDate = "EndDate")),ID = 1:7),class = c("spec_tbl_df","tbl_df","tbl","data.frame"),row.names = c(NA,-7L))

当我尝试以下操作时,它将返回带有0行的tibble

d %>%
  filter(Date >= as_date("2019-11-02"),Date <= as_date("2019-11-02"))

但是,当我尝试此操作时,它会起作用。 我丢失了什么? 问题是,我希望Date <= as_date("2019-11-03")为所有'2019-11-03'提交的内容返回TRUE(我实际上在我的数据集中有那些,但没有。

d %>%
  filter(Date >= as_date("2019-11-02"),Date <= as_date("2019-11-03"))
xuhe001 回答:使用lubridate和dyplr筛选特定日期的数据集

您需要将datetime对象转换为date类,然后进行比较。还可以使用&来包含多个要检查的条件。

library(dplyr)
library(lubridate)

d %>%
  filter(as_date(Date) >= as_date("2019-11-02") & 
         as_date(Date) <= as_date("2019-11-02"))

#  Date                   ID
#  <dttm>              <int>
#1 2019-11-02 07:19:19     1
#2 2019-11-02 14:02:02     2
#3 2019-11-02 15:59:23     3
#4 2019-11-02 19:22:58     4
#5 2019-11-02 20:49:25     5
#6 2019-11-02 21:06:07     6
#7 2019-11-02 21:27:12     7

此外,我们还可以使用between

d %>%
  filter(between(as_date(Date),as_date("2019-11-02"),as_date("2019-11-02")))
,

%in%表示确定矢量运算符中是否包含特定值。因此,您可以使用%in%

d %>%
  filter(Date >= as.Date("2019-11-02") %in%
           (Date <= as_date("2019-11-03")))
# A tibble: 7 x 2
  Date                   ID
  <dttm>              <int>
1 2019-11-02 07:19:19     1
2 2019-11-02 14:02:02     2
3 2019-11-02 15:59:23     3
4 2019-11-02 19:22:58     4
5 2019-11-02 20:49:25     5
6 2019-11-02 21:06:07     6
7 2019-11-02 21:27:12     7
本文链接:https://www.f2er.com/3162464.html

大家都在问