在R中将时间四舍五入到最接近的小时[重复]
Posted
技术标签:
【中文标题】在R中将时间四舍五入到最接近的小时[重复]【英文标题】:rounding times to the nearest hour in R [duplicate] 【发布时间】:2013-05-02 21:27:22 【问题描述】:我有格式的数据
time <- c("16:53", "10:57", "11:58")
等
我想创建一个新列,其中每个时间都四舍五入到最接近的小时。我似乎无法让 POSIX 命令为我工作。
as.character(format(data2$time, "%H:%M"))
format.default(结构(as.character(x),names = names(x),dim = dim(x),)错误: 'trim' 参数无效
更不用说使用 round 命令了。谁能给点建议?
【问题讨论】:
format
用于向另一个方向发展(从日期时间到特定表示)。我不确定是否有部分日期时间的课程,例如,仅由小时和分钟组成。
***.com/questions/16041093/…
类似:as.POSIXlt(strptime(tt, format="%H:%M") + 30*60)$hour
??
这是怎么复制的?
【参考方案1】:
## Example times
x <- c("16:53", "10:57", "11:58")
## POSIX*t objects need both date and time specified
## Here, the particular date doesn't matter -- just that there is one.
tt <- strptime(paste("2001-01-01", x), format="%Y-%m-%d %H:%M")
## Use round.Date to round, then format to format
format(round(tt, units="hours"), format="%H:%M")
# [1] "17:00" "11:00" "12:00"
【讨论】:
你不需要添加日期,如果你添加当前日期会自动添加strptime(x, "%H:%M")
@eddi -- 很酷,但是在夏令时转换的日子里,任何可能让你在特定时间陷入麻烦的机会? (我说这一天并不重要,但正是出于这个原因,我选择了一个我认为没有任何地方有 DLT 转变的地方......)
不明白为什么会这样 - 我只是检查了一下,据我所知它工作正常。
@eddi 如果您在美国,请尝试将您的计算机系统日期设置为 2013 年 3 月 10 日(我们今年 DST 的开始),然后运行 round(strptime("1:31", "%H:%M"), "hours")
。 R 返回[1] "2013-03-10 03:00:00 PDT"
——正是我想要避免的。
谢谢乔希!我明白为什么在测试之前我没有看到差异,我使用 %M 而不是 %m 错误地格式化了月份。没错,添加日期更安全。以上是关于在R中将时间四舍五入到最接近的小时[重复]的主要内容,如果未能解决你的问题,请参考以下文章