【问题标题】:cannot get subset of date from df based on date columns无法根据日期列从 df 获取日期子集
【发布时间】:2020-05-08 15:25:04
【问题描述】:

我正在对包含停车交易的数据框进行报告。数据框有两个名为 start_timeend_time 的 POSIXct 变量。它们的外观示例如下:

2019-11-25 10:35:00 UTC" "2019-11-28 18:21:00 UTC"

我想从"2020-02-06""2020-03-23" 获取我的数据框的一个子集。 在此期间肯定发生了交易,但是当我使用以下代码时,我得到了一个观察值为零的子集。

cutdate<- as.Date("2020-03-23",format ="%Y-%m-%d")
bdate<-as.Date("2020-06-02",format ="%Y-%m-%d")

dwdf%>% filter(as.Date(start_time) >= bdate & as.Date(end_time) < cutdate)->Bdf

我尝试过其他功能,例如子集等,但我得到了同样的结果。然后我尝试了一些更简单的方法,并尝试从变量 start_time 中查看是否创建了一个简单的布尔表达式,例如

any(as.Date(dwdf$start_time) > bdate)

如果我得到任何 TRUE,但我得到的只是 false。我不明白为什么会这样,因为如果我这样做range(start_time) 有明显的开始时间晚于 2 月 6 日。

我也看过关于堆栈交换的类似问题,但我不知道为什么我得到不同的结果,因为我正在实施他们所说的。

【问题讨论】:

    标签: r dplyr boolean posixct as.date


    【解决方案1】:

    我强烈推荐lubridate 包来处理时间数据。

    library(lubridate)
    
    x <- c("2019-11-25 10:35:00 UTC", "2019-11-28 18:21:00 UTC")
    
    x_datetime <- ymd_hms(x)
    
    x_datetime < ymd(20191126)
    [1]  TRUE FALSE
    

    这些函数(ymd 表示“年-月-日”或ymd_hms 表示“年-月-日-时-分-秒”)可以轻松地将数据转换为日期格式。你有这个,比较并不难。

    【讨论】:

    • 您好,谢谢您的回答。我尝试了您上面提到的功能,它们效果很好。我只是对你的回答有疑问。为什么你有变量 x_datetime 但我没有看到你在任何地方使用它
    • 你说得对。那是一个错误,我纠正了它。
    • 顺便说一句 - 如果答案是正确的,请将其标记为答案,以便其他人知道它有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    相关资源
    最近更新 更多