[英]Timestamp conversion in R and calculating Time Difference between 2 Columns of different DFs
[英]Calculating Time Difference between two columns
在 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
首先,这与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
您也可以使用“ 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.