从数字到时钟的时间格式转换
Time format conversion from numerical to clock
我想转换包含时间的列,例如,将 13.5 PM 转换为时钟时间格式,即 13:30 PM。请帮忙
这是一个非常通用的舍入方法:
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"
另一种方法
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"
我想转换包含时间的列,例如,将 13.5 PM 转换为时钟时间格式,即 13:30 PM。请帮忙
这是一个非常通用的舍入方法:
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"
另一种方法
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"