时间格式从数字到时钟的转换

时间:2018-12-06 11:02:21

标签: r datetime time datetime-format time-format

我想转换包含时间的列,例如,将13.5 PM转换为时钟时间格式,即13:30 PM。请帮助

2 个答案:

答案 0 :(得分:1)

这是一种非常通用的四舍五入方法:

x <- c("13.5 PM", "9.003 AM", "23.823 PM", "5.1234 AM")

library(gsubfn)
gsubfn("((?<=.)\\d+(?= ))", function(x, ...)
  sprintf("%02d", round(as.numeric(paste0("0.", x)) * 60)), x, perl = TRUE)
# [1] "13.30 PM" "9.00 AM"  "23.49 PM" "5.07 AM" 

答案 1 :(得分:1)

另一种方法

vec <- c("13.5 PM", "12.2 AM")


library( magrittr )  
as.POSIXct( gsub( " .M", "", vec) %>% 
              as.numeric() * 3600,  
            origin = "01-01-1970", 
            tz = "UTC" ) %>% 
  format( "%H:%M" )

[1] "13:30" "12:12"

您可以将%p用于AM / PM(如果您的语言环境支持,则将%I用于小时),但这似乎是多余的,因为您的时间采用24小时制。

没有管道:

format( as.POSIXct( as.numeric( gsub( " .M", "", vec) ) * 3600, origin = "01-01-1970", tz = "UTC" ), "%H:%M" )

#[1] "13:30" "12:12"