在转换POSIXCT格式的因子然后应用日期时间格式后,我想取两个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
答案 0 :(得分:18)
首先,这与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
答案 1 :(得分:1)
对我来说,这是一个令人惊讶且有趣的发现。如果要减去POSIXct
个对象,则可以使用as.numeric
将其转换为“小时”,“分钟”等。
有关此示例,请参见
CR_Date$hours <- as.numeric(CR_Date$pos2 - CR_Date$pos1, "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
进一步的探索,
as.numeric(CR_Date$pos2 - CR_Date$pos1, "mins")
#[1] 0 615
as.numeric(CR_Date$pos2 - CR_Date$pos1, "days")
#[1] 0.0000000 0.4270833