将12小时制时间转换为24小时制时间。

7
我有每小时天气数据。我已经在这里看到了函数示例:http://casoilresource.lawr.ucdavis.edu/drupal/node/991。我正在修改代码以适应机场数据,该数据具有不同的URL类型。另一个问题是机场天气数据中的时间数据以12小时格式保存。以下是数据示例:
14  10:43 AM
15  10:54 AM
16  11:54 AM
17  12:07 PM
18  12:15 PM
19  12:54 PM
20  1:54 PM
21  2:54 PM

这是我尝试的内容:(我发现仅使用“PM”不够谨慎,因为通过此算法的任何12点至1点之间的时间都会偏差)
date<-Sys.Date()


data$TimeEST<-strsplit(data$TimeEST, ' ')
for (x in 1:35){
    if('AM' %in% data$TimeEST[[x]]){
        gsub('AM','',data$TimeEST[[x]])
        data$TimeEST[[x]]<-str_trim(data$TimeEST[[x]])
        data$TimeEST[[x]]<-str_c(date,' ',data$TimeEST[x],':',data$TimeEST[2])
    }
    else if('PM' %in% data$TimeEST[[x]]){
        data$TimeEST[[x]]<-gsub('PM', '',data$TimeEST[[x]])
        data$TimeEST[[x]]<-strsplit(data$TimeEST[[x]], ':')
        data$TimeEST[[x]][[1]][1]<-as.integer(data$TimeEST[[x]][[1]][1])+12
        data$TimeEST[[x]]<-str_trim(data$TimeEST[[x]][[1]])
        data$TimeEST[[x]]<-str_c(date, " ", data$TimeEST[[x]][1],':',data$TimeEST[[x]][2])

    }
}

任何帮助吗?
2个回答

15

strptime 能用吗?

df2= structure(c("10:43 AM", "10:54 AM", "11:54 AM", "12:07 PM", "12:15 PM", 
            "12:54 PM", "1:54 PM", "2:54 PM"), .Dim = c(8L, 1L))



 strptime(df2, "%I:%M %p" )

或者如果你不想要日期,可以考虑使用类来创建对象,具体取决于你需要什么样的类。

substr(strptime(df2, "%I:%M %p" ),11,19)

日期问题实际上相当大。我希望日期/时间信息是一个可以放入“zoo对象”的对象,但更重要的是函数的主要目标是返回特定日期的数据。如果我失去了该日期信息(虽然开始不在列中),那么将来会引发更多问题。用户在输入日期范围时提供日期信息。对于该范围内的每一天,都会读取网站并清理数据。清理的一部分是将12小时制转换为24小时制。再次感谢。 - Michael Street

将时间列转换为正确编码的日期时间 <br/>

data $ TimeEST <- strptime(data $ TimeEST,format ='%I:%M%p')<br/> data $ TimeEST <- substr(data $ TimeEST,11,19) data $ TimeEST <- str_c(date,data $ TimeEST) data $ TimeEST <- as.POSIXlt(data $ TimeEST,format ='%Y-%m-%d%H:%M:%S')@AndresT感谢您的建议,这是我用来获得所需对象类型的方法。
- Michael Street

4

take a look at ?strptime.

as.POSIXct(data$TimeEST, format='%I:%M %p')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接