Sho*_*anz 7 datetime r lubridate
在转换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

the*_*ail 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
您还可以使用“as.double方法”及其units参数(请参阅?diffime):
as.double方法 [as.double(x, units = "auto", ...)] 返回以指定单位表示的数值
...这里x是
从类继承的对象
"difftime"
应用于您的示例, wherepos2 - 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
| 归档时间: | 
 | 
| 查看次数: | 17890 次 | 
| 最近记录: |