更改列中的时间精度

  • 本文关键字:时间 精度 r
  • 更新时间 :
  • 英文 :


我的数据文件中有一列显示时间值,如下所示:

05:20:45.154

如何将毫秒数更改为这样?

05:20:45.2

感谢

您可以strsplit并四舍五入第三个元素。

round_time <- function(x, r=1) {
tmp <- el(strsplit(tm, ':'))
tmp[3] <- round(as.numeric(tmp[3]), r)
paste(tmp, collapse=':')
}
round_time('05:20:45.154')
# [1] "05:20:45.2"

函数strftime%OS1似乎截断了毫秒,而不是四舍五入。

strftime(as.POSIXct(paste(Sys.Date(), '05:20:45.154')), format='%H:%M:%OS1')
# [1] "05:20:45.1"

以下是一种使用subdplyr的方法:

library(dplyr)
df %>%
mutate(time = paste0(sub("^(.{6}).*", "\1", time), 
round(as.numeric(sub(".*(.{6})", "\1", time)),1)))
time
1 05:20:45.2
2 12:15:40.8

这是如何工作的:

paste0将使用反向引用\1:捕获的两个子字符串组合在一起

  • ^(.{6}).*:这是:后面的小时和分钟
  • .*(.{6}):这是秒和毫秒

此外,我们将第二个字符串转换为数字类型,以便将其round转换为一个小数。函数paste0将两个片段再次放回。

数据:

df <- data.frame(
time = c("05:20:45.154", "12:15:40.841")
)

最新更新