【问题标题】:Filter to a specific date within a specific column过滤到特定列中的特定日期
【发布时间】:2020-04-25 07:11:25
【问题描述】:

我有一个数据框 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 仅显示 2019 年 12 月 5 日的日期,结果如下:

                           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 日的所有日子,包括时间(小时、分钟和秒) 这可能吗?

【问题讨论】:

    标签: r date time dplyr


    【解决方案1】:

    这里,“DateTimeUTC”的格式不同。将列转换为DateTime类(好像格式是月-日-年-时-分-秒),去掉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))
    

    【讨论】:

    • 是的,我试图接受,但它不让我接受。我不得不“等待”一段时间。谢谢
    • @akrun,如果有两列包含日期,我将如何过滤。前任。开始时间列和结束时间列
    • @TanishaHudson 我会将“开始时间”和“结束时间”都转换为DateTime' class as showed here and then use in filter`,即data %&gt;% filter(as.Date(mdy_hms(starttime)) &gt;= "2019-12-05" &amp; as.Date(mdy_hms(endtime)) &lt;= "2020-12-05")
    猜你喜欢
    • 1970-01-01
    • 2018-08-06
    • 2020-03-25
    • 2023-03-09
    • 2015-12-04
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多