使用R语言lubridate包round_date函数处理时间取整报错问题
解决R语言时间取整报错问题
错误原因
你写的round_date函数里,unit参数用了second(as_datetime(...))计算出的数值,这完全不符合函数要求——round_date的unit参数需要传入时间单位字符串(比如"second"、"minute"),不是数值,这才导致了"Invalid period name: 4"的报错。
正确写法
如果你的需求是把时间按分钟取整(比如09:14:59转成09:15:00),直接给unit传"minute"即可。如果需要按其他间隔取整(比如5分钟),可以写成"5 minutes"。
基础示例(已转成datetime类型的字段)
library(lubridate) library(dplyr) temperature = worksheet_temperature %>% mutate(measurement_date = round_date(measurement_date, unit = "minute"))
处理Excel格式时间数值
如果你的measurement_date是Excel导出的数值型时间(所以你之前用了origin = "1899-12-30"),需要先把它转成标准datetime类型,再做取整:
temperature = worksheet_temperature %>% mutate( # 先转成标准datetime measurement_date = as_datetime(measurement_date, origin = "1899-12-30"), # 按分钟取整 measurement_date_rounded = round_date(measurement_date, unit = "minute") )
补充说明
round_date会自动按四舍五入规则取整:比如秒数≥30的时间会进位到下一分钟,<30则舍去。- 如果需要强制向上取整(不管秒数多少都进位),可以用
ceiling_date函数,用法和round_date一致;强制向下取整用floor_date。
内容的提问来源于stack exchange,提问作者Francisco Ribeiro
相关产品推荐
相关产品推荐

