我想将时间戳从字符转换为时间,但是我不希望有任何日期。最重要的是,它必须显示毫秒,例如“ hh:mm:ss,os”。
如果我使用as.POSIXCT
,它将始终在时间戳记中添加日期前缀,但这不是我的意图。我还检查了lubridate
程序包,但似乎找不到超出“ as.hms”的函数,因此该函数至少以毫秒为单位显示两位数。
使用POSIXct的示例
df <-c("01:31:12.20","01:31:14.56","01:31:14.84")
options(digits.secs = 2)
df <- as.POSIXct(df, format="%H:%M:%OS")
这是结果:
[1] "2019-03-15 01:31:12.20 EDT" "2019-03-15 01:31:14.55 EDT"
[3] "2019-03-15 01:31:14.83 EDT"
谢谢。
答案 0 :(得分:0)
也许hms
包可以完成OP的期望。 hms
基于'difftime'类,实现一个S3类,用于存储和格式化日期时间值。
library(hms)
as.hms(df)
01:31:12.200000 01:31:14.560000 01:31:14.840000
它可用于计算,例如
diff(as.hms(df))
00:00:02.360000 00:00:00.280000
请注意,print()
和format()
方法不接受其他参数,并且不遵守options(digits.secs = 2)
。
hms
类类似于创建期间对象的lubridate
的{{1}}函数:
as.hms()
lubridate::hms(df)
算术也可以完成:
[1] "1H 31M 12.2S" "1H 31M 14.56S" "1H 31M 14.84S"
diff(lubridate::hms(df))
请注意,时间,日期和日期时间对象的内部表示形式通常基于数字类型,以便进行计算。内部表示与打印对象时的字符串不同。
[1] 2.36 0.28
包中的ITime
类是一个时间类,它存储一天中的整数秒数。因此,它无法处理毫秒。