如何使用data.table的as.ITime函数保留百分秒?
保留data.table中时间列的百分秒
as.ITime()本质是将时间存储为整数秒数,天生无法保留亚秒级(比如百分秒)的信息。要在data.table里保留这部分内容,有两种实用方案:
方案1:改用POSIXct类型存储
POSIXct支持亚秒级精度,直接把字符时间转成该类型即可,后续若只需显示时间部分,用format()指定格式就行:
library(data.table) dt <- data.table(time_str = c("01:22:03.56", "10:15:30.12")) # 转换为POSIXct类型(用任意日期填充,仅保留时间精度) dt[, time_posix := as.POSIXct(time_str, format = "%H:%M:%OS")] # 查看原始值(会带默认日期,但百分秒精度已保留) dt$time_posix # 仅显示带百分秒的时间部分 format(dt$time_posix, "%H:%M:%OS2")
方案2:存储为带小数的总秒数
如果不想用POSIXct,也可以把时间转成以秒为单位的数值(含小数),百分秒会保留在小数部分,之后可按需格式化为时间字符串:
# 解析时间并转为总秒数 dt[, time_secs := as.numeric(strptime(time_str, format = "%H:%M:%OS")) - as.numeric(strptime("00:00:00", format = "%H:%M:%OS"))] # 将数值转回带百分秒的时间字符串 dt[, time_formatted := strftime(as.POSIXct(time_secs, origin = "1970-01-01"), "%H:%M:%OS2")]
注意:如果需要后续做时间运算,POSIXct类型会更便捷;若仅用于存储和展示,两种方案均可。
内容的提问来源于stack exchange,提问作者chc
相关产品推荐
相关产品推荐

