【问题标题】:Calculating Time Difference between two columns计算两列之间的时间差
【发布时间】:2014-09-21 21:41:31
【问题描述】:

在POSIXCT格式转换因子然后应用日期时间格式后,我想取2个pos1和pos2之间的日期时间差。

但是,当我为特定项目执行此操作时,我会在控制台中得到正确的答案,但是当我对整个集合进行操作时,控制台仅输出数字,并且日期帧也反映了您所看到的这些数字。

当我尝试获取差异时,如何获取数据框中的小时数? 我正在使用 lubridate 包,有什么功能可以这样做吗?

这是 RStudio 中描述它的数据的一些示例代码/图片

CR_Date <- data.frame(
  pos1="2014-07-01 00:00:00",
  pos2=c("2014-07-01 00:00:00","2014-07-01 10:15:00")
)
CR_Date[] <- lapply(CR_Date,as.POSIXct)
CR_Date

#        pos1                pos2
#1 2014-07-01 2014-07-01 00:00:00
#2 2014-07-01 2014-07-01 10:15:00

CR_Date$pos2[2] - CR_Date$pos1[2]
#Time difference of 10.25 hours
CR_Date$hours <- CR_Date$pos2 - CR_Date$pos1

【问题讨论】:

  • 以秒为单位,而不是小时。您可以将CR_date 除以 3600。

标签: r datetime lubridate


【解决方案1】:

首先,这与 lubridate 无关。

其次,RStudio 通过在显示窗口中打印变量让您失望了。如果您在命令行窗口中输入CR_Date$hours,您将看到它打印出来

#Time differences in secs
#[1]     0 36900

head(CR_Date) 给出:

#        pos1                pos2      hours
#1 2014-07-01 2014-07-01 00:00:00     0 secs
#2 2014-07-01 2014-07-01 10:15:00 36900 secs

其中任何一个都会让您知道它所显示的内容。

正如@Victorp 建议的那样,difftime 是解决此问题的方法:

CR_Date$hours <- with(CR_Date, difftime(pos2,pos1,units="hours") )
CR_Date

#        pos1                pos2       hours
#1 2014-07-01 2014-07-01 00:00:00  0.00 hours
#2 2014-07-01 2014-07-01 10:15:00 10.25 hours

【讨论】:

    【解决方案2】:

    您也可以使用“as.double 方法”及其units 参数(参见?diffime):

    as.double方法[as.double(x, units = "auto", ...)]返回以指定单位表示的数值

    ...x 在哪里

    一个继承自类"difftime"的对象

    应用于您的示例,其中pos2 - pos1 将产生difftime 对象:

    CR_Date$hours <- as.double(CR_Date$pos2 - CR_Date$pos1, units = "hours")
    CR_Date
    
    #        pos1                pos2 hours
    #1 2014-07-01 2014-07-01 00:00:00  0.00
    #2 2014-07-01 2014-07-01 10:15:00 10.25
    

    或其他units

    as.double(CR_Date$pos2 - CR_Date$pos1, units = "mins")
    #[1]   0 615
    
    as.double(CR_Date$pos2 - CR_Date$pos1, units = "days")
    #[1] 0.0000000 0.4270833
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多