R 中的日期和时间非常混乱。我只想随机生成一些 24 小时时钟时间,然后添加到它们中。
随机生成:
library(lubridate)
hourTime <- as.list(format(seq.POSIXt(as.POSIXct(Sys.Date()),
as.POSIXct(Sys.Date()+1),
by = "5 min"),
"%H:%M", tz="GMT"))
尝试转换为日期:
df$ARRIVALTIME <- replicate(1000, sample(hourTime, 1, replace=F))
尝试添加到之前的时间:
df$TRETTIME <- df$ARRIVALTIME +
(hours(sample(1:3, 1000, replace=T)) + minutes(sample(1:60, 1000, replace=T)))
我想这失败了,因为我没有时间格式化的对象。如何添加随机时间ARRIVALTIME
?
更简单——底层POSIXt
是长格式/按元素POSIXlt
(这里没用)或紧凑型POSIXct
-- 这只是一个双精度(又名numeric
)——你可以做“数学”。
因此,随心所欲地创造时间,然后添加实际值:
R> now <- Sys.time()
R> set.seed(123)
R> deltas <- cumsum(rnorm(5)) # just five N(0,1), added up
R>
R> now
[1] "2018-06-14 16:50:36.55687 CDT"
R>
R> now + deltas
[1] "2018-06-14 16:50:35.996404 CDT" "2018-06-14 16:50:35.766226 CDT"
[3] "2018-06-14 16:50:37.324935 CDT" "2018-06-14 16:50:37.395443 CDT"
[5] "2018-06-14 16:50:37.524731 CDT"
R>
一旦了解了基本类型,就几乎不需要附加包
因为一切都在(小数)秒内完成。所以加上一个小时就是60*60等等。附加包仍然有用工作日约定、假期和其他解析器。
您的代码片段中的问题是format()
破坏了Datetime
object:你要求 R 创建一个字符串,它确实做到了。对于那些你不再能做数学的事情。因此,首先进行数学计算,然后进行漂亮的打印或格式化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)