过滤到特定列中的特定日期

时间:2020-01-07 18:34:30

标签: r date time dplyr

我有一个数据框df,其列为DateTimeUTC。

                         ID              DateTimeUTC

                         A               12/4/2019 11:30:30 PM
                         A               12/4/2019 11:30:30 PM
                         B               12/5/2019 11:30:30 PM
                         B               12/5/2019 11:30:30 PM
                         B               12/5/2019 11:30:30 PM

我想过滤,以便DateTimeUTC只显示12/5/2019的日期,结果如下:

                           ID              DateTimeUTC


                         B               12/5/2019 11:30:30 PM
                         B               12/5/2019 11:30:30 PM
                         B               12/5/2019 11:30:30 PM

我已经尝试过此命令,但是没有成功:

                       library('dplyr')
                       library('lubridate')

                       data %>%  filter as.Date(DateTimeUTC == "2019-12-05")

我想要2019年12月5日的所有日子,包括时间(小时,分钟和秒) 这可能吗?

1 个答案:

答案 0 :(得分:4)

此处,“ DateTimeUTC”的格式不同。将列转换为DateTime类(似乎格式为month-day-year-year-hour-minute-second),并使用as.Date删除时间,然后进行比较(==

library(dplyr)
library(lubridate)
data %>%
     filter(as.Date(mdy_hms(DateTimeUTC)) ==   "2019-12-05")
#  ID           DateTimeUTC
#1  B 12/5/2019 11:30:30 PM
#2  B 12/5/2019 11:30:30 PM
#3  B 12/5/2019 11:30:30 PM

在OP的代码中,as.Date应用于逻辑矢量,该逻辑矢量无论如何都是FALSE,因为它将原始格式与其他格式进行比较,这将导致执行代码失败即

"12/4/2019 11:30:30 PM" == "2019-12-05"
#[1] FALSE

为此as.Date包装会导致错误

as.Date("12/4/2019 11:30:30 PM" == "2019-12-05")

as.Date.default(“ 12/4/2019 11:30:30 PM” ==“ 2019-12-05”)中的错误:
不知道如何转换'“ 12/4/2019 11:30:30 PM” ==“ 2019-12-05”' 将“日期”分类

数据

data <- structure(list(ID = c("A", "A", "B", "B", "B"), 
   DateTimeUTC = c("12/4/2019 11:30:30 PM", 
"12/4/2019 11:30:30 PM", "12/5/2019 11:30:30 PM", "12/5/2019 11:30:30 PM", 
"12/5/2019 11:30:30 PM")), class = "data.frame", row.names = c(NA, 
-5L))