【问题标题】:Time format conversion from numerical to clock [closed]从数字到时钟的时间格式转换[关闭]
【发布时间】:2019-05-08 01:33:34
【问题描述】:

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

【问题讨论】:

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


    【解决方案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" 
    

    【讨论】:

    • 非常好,比我的更通用。不过,不喜欢对 3rd 方包的依赖。
    • 非常感谢它正在像你一样工作。但是我有一列包含这些值,当我使用修改后的命令时出现错误。你能指导我吗?我使用的代码是 gsubfn("((?
    • @MuhammadFaisal,试试 gsubfn("((?x 不应该改变。它是倒数第二个参数,您需要指定应该修改的时间向量。
    • 它给出了一个错误,但已经使用 magrittr 库解决了感谢您调查问题
    • @MuhammadFaisal,您的专栏很可能是一个因素。在这种情况下,您需要像 as.character 一样在 library(gsubfn) gsubfn("((?
    【解决方案2】:

    另一种方法

    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 表示上午/下午(如果您的语言环境支持,则使用 %I 表示小时),但这似乎是多余的,因为您的时间是 24 小时格式。

    没有管道:

    format( as.POSIXct( as.numeric( gsub( " .M", "", vec) ) * 3600, origin = "01-01-1970", tz = "UTC" ), "%H:%M" )
    
    #[1] "13:30" "12:12"
    

    【讨论】:

    • 非常好!也适用于 Julius 的数据。 library(magrittr) 不过!
    • 感谢@AndreElrico,已更新...
    • 非常感谢它的工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2012-11-28
    • 2019-06-10
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多