我的数据文件中有一列显示时间值,如下所示:
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"
以下是一种使用sub
和dplyr
的方法:
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")
)