【问题标题】:Adding/subtracting date-time columns in data-frames在数据框中添加/减去日期时间列
【发布时间】:2017-12-17 13:10:29
【问题描述】:

我有一个包含两个文本列的数据框,它们本质上是时间戳列,即 BEFORE 和 AFTER,格式为 12/29/2016 4:29:00 PM。我想比较每行的 BEFORE 和 AFTER 时间之间的差距是否超过 5 分钟。 R中的哪个包允许时间戳之间的减法?

【问题讨论】:

    标签: r date datetime time


    【解决方案1】:

    不需要额外的包,使用base R可以实现日期时间比较。

    首先将您的角色强制为有效的日期时间结构。这里我使用POSIXct

    d1= as.POSIXct("12/29/2016 4:29:00 PM",format="%m/%d/%Y %H:%M:%S")
    d2= as.POSIXct("12/30/2016 5:29:00 PM",format="%m/%d/%Y %H:%M:%S")
    

    那么你可以使用difftime来获得分钟的差异:

    difftime(d1,d2,units="mins")
    

    请注意,所有这些函数都是矢量化的,因此相同的代码将适用于矢量。

    管理下午/上午

    为了照顾 PM/AM,我们应该将 %p 添加到应该与 %I 而不是 %H 结合使用的格式中:

    d1= as.POSIXct("12/28/2016 11:53:00 AM",
             format="%m/%d/%Y %I:%M:%S %p")
    d2= as.POSIXct("12/28/2016 12:03:00 PM",
             format="%m/%d/%Y %I:%M:%S %p")
    
    difftime(d2,d1,units="mins")
    ## Time difference of 10 mins
    

    有关日期/时间格式的更多帮助,您可以阅读?strptime

    【讨论】:

    • 这似乎有效,除非时间从上午更改为下午,反之亦然。例如:> d1= as.POSIXct("12/28/2016 11:53:00 AM",format="%m/%d/%Y %H:%M:%S") > d2= as.POSIXct ("12/29/2016 12:03:00 PM",format="%m/%d/%Y %H:%M:%S") > difftime(d2,d1,units="mins") 时间1450 分钟的差异这是不正确的,因为我们知道实际差异是 10 分钟。它增加了整整 24 小时或 1440 分钟。为什么会这样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    相关资源
    最近更新 更多