【问题标题】:Transform variable into a %H:%M time format in R将变量转换为 R 中的 %H:%M 时间格式
【发布时间】:2012-04-04 17:37:40
【问题描述】:

我有这个向量表示时间记录为小时(0 到 24)和分钟(0 到 59)。我想将它转换为 R 中的 %H:%M 时间格式,以便我可以使用 difftime 之类的函数。

str(SF5$ES_TIME)
 int [1:11452] 1940 600 5 1455 1443 2248 1115 900 200 420 ...

这是我尝试过的,但在这两种情况下,我都收到了错误:

>SF5$time1<-as.POSIXct(SF5$ES_TIME, format = "%H:%M",tz="EST")
Error in as.POSIXct.numeric(SF5$ES_TIME, format = "%H:%M", tz = "EST") : 
  'origin' must be supplied
SF5$time1<-as.POSIXct(as.character(SF5$ES_TIME), format="%H:%M",tz="")
> str(SF5$time1)
POSIXct[1:11452], format: NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA ...

任何帮助或阅读建议将不胜感激! 谢谢, 奥蕾莉

【问题讨论】:

  • 在您的示例中,5 和 600 表示什么?努力将你所有的数字变成四位数,并用零填充(例如sprintf("%04d", 1))将是一个好的开始。那么你尝试过的东西应该可以工作。 as.POSIXct('1940', format='%H%M')

标签: r


【解决方案1】:

嗯,错误信息告诉你提供origin,一分钟是60秒,所以:

SF5 <- list(ES_TIME=as.integer(c(1940,600,5,1455,1443,2248,1115,900,200,420)))

x <- as.POSIXct(SF5$ES_TIME*60, origin="1970-01-01")
format(x, format="%H:%M")
#[1] "08:20" "10:00" "00:05" "00:15" "00:03" "13:28" "18:35" "15:00" "03:20" "07:00"

请注意,POSIXct 日期只是一个数字(带有类),因此您需要调用 format 来根据需要打印它 - x 的默认打印将打印完整的日期信息(年份/月/日等)。

...任何起源日期都可以,因为您不关心它,但1970-01-01 是通常的起源...

【讨论】:

    【解决方案2】:

    我能够破解密码!谢谢大家的提示!

    #1) as suggested by Justin : put all numbers into four digits with zero padding
        SF5$ES_TIME2<-sprintf("%04d",SF5$ES_TIME) 
    #2) Matched these %H%M with their corresponding date %y-%m-%d
        SF5$ES.datetime <- paste(SF5$ES_TIME2,SF5$ES_DATE,sep=" ")
    #3) Transform into Date-Time format
        SF5$ES.datetime2 <- as.POSIXct(SF5$ES.datetime,format="%H%M %y-%m-%d", tz="")
    
    # Did the same for my other time-date of interest
    SF5$SH_TIME2<-sprintf("%04d",SF5$SH_TIME) 
    SF5$SH.datetime <- paste(SF5$SH_TIME2,SF5$SH_DATE,sep=" ")
    SF5$SH.datetime2 <- as.POSIXct(SF5$SH.datetime,format="%H%M %y-%m-%d", tz="")
    
    # Calculate the time difference between the 2 date-time in hours
    SF5$duration<-difftime(SF5$SH.datetime2,SF5$ES.datetime2,units="hours",tz="")
    

    【讨论】:

    • 嗯。在这里,您实际上也使用了日期部分,而不仅仅是时间部分。那不在您最初的问题中?
    • 同意,我的错。后来我意识到我有可用的日期!
    猜你喜欢
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    相关资源
    最近更新 更多