在SPSS和R之间转换小时数

在SPSS和R之间转换小时数,r,lubridate,R,Lubridate,我在SPSS中构建了每小时的数据。开始时间7:00,结束时间7:59。当我在R中读到这些时,我得到了这样的数字:57600和61140。如何让R将这些值识别为小时?感谢您的帮助*strong text*我猜您在R中得到的数字是以秒为单位的相应小时数,例如02:51:03=2*60*60+51*60+3=10263秒。不符合我猜测的是7:00不是57600秒,而是25200秒(上午)或68400秒(下午)。57600秒对应于16:00(下午4:00) 如果这些值实际上是秒,那么您可以使用下面的函数

我在SPSS中构建了每小时的数据。开始时间7:00,结束时间7:59。当我在R中读到这些时,我得到了这样的数字:57600和61140。如何让R将这些值识别为小时?感谢您的帮助*strong text*

我猜您在
R
中得到的数字是以秒为单位的相应小时数,例如02:51:03=2*60*60+51*60+3=10263秒。不符合我猜测的是7:00不是57600秒,而是25200秒(上午)或68400秒(下午)。57600秒对应于16:00(下午4:00)

如果这些值实际上是秒,那么您可以使用下面的函数
toHour
将它们转换为时间

    toHour <- function(x, seconds = F)  # x is a value of seconds
    {
     hours <- x %/% 3600
     secs. <- x %% 3600
     mins <- secs. %/% 60
     secs <- secs. %% 60

     ## add a 0 to single-digit hours / minutes / seconds to make it look nicer  
     mytime <- c(hours, mins, secs)
     for(i in 1:length(mytime))  
      {
       if(length(unlist(strsplit(as.character(mytime[i]), split = ""))) == 1)
        {
         mytime[i] <- paste(0, mytime[i], sep = "", collapse = "")
        }
      }
     ##

    if(seconds == T)
      {
       return(paste(mytime[1], mytime[2], mytime[3], sep = ":", collapse = ""))
      }
     if(seconds == F)
      {
       return(paste(mytime[1], mytime[2], sep = ":", collapse = ""))
      }
    }

    toHour(10263, seconds = T) # check function
    #[1] "02:51:03" #checked
    my_seconds <- seq(57600,61140, 60) # I guess you have no seconds in your time and, so, "my_seconds" is the values you get in R
    sapply(my_seconds, toHour) # turn all values (seconds) to hours:minutes
    #[1] "16:00" "16:01" "16:02" "16:03" "16:04" ...
    sapply(my_seconds, toHour, seconds = T) # turn all values (seconds) to hours:minutes:seconds
    #[1] "16:00:00" "16:01:00" "16:02:00" "16:03:00" ...

我猜你在
R
中得到的数字是以秒为单位的相应小时数,例如02:51:03=2*60*60+51*60+3=10263秒。不符合我猜测的是7:00不是57600秒,而是25200秒(上午)或68400秒(下午)。57600秒对应于16:00(下午4:00)

如果这些值实际上是秒,那么您可以使用下面的函数
toHour
将它们转换为时间

    toHour <- function(x, seconds = F)  # x is a value of seconds
    {
     hours <- x %/% 3600
     secs. <- x %% 3600
     mins <- secs. %/% 60
     secs <- secs. %% 60

     ## add a 0 to single-digit hours / minutes / seconds to make it look nicer  
     mytime <- c(hours, mins, secs)
     for(i in 1:length(mytime))  
      {
       if(length(unlist(strsplit(as.character(mytime[i]), split = ""))) == 1)
        {
         mytime[i] <- paste(0, mytime[i], sep = "", collapse = "")
        }
      }
     ##

    if(seconds == T)
      {
       return(paste(mytime[1], mytime[2], mytime[3], sep = ":", collapse = ""))
      }
     if(seconds == F)
      {
       return(paste(mytime[1], mytime[2], sep = ":", collapse = ""))
      }
    }

    toHour(10263, seconds = T) # check function
    #[1] "02:51:03" #checked
    my_seconds <- seq(57600,61140, 60) # I guess you have no seconds in your time and, so, "my_seconds" is the values you get in R
    sapply(my_seconds, toHour) # turn all values (seconds) to hours:minutes
    #[1] "16:00" "16:01" "16:02" "16:03" "16:04" ...
    sapply(my_seconds, toHour, seconds = T) # turn all values (seconds) to hours:minutes:seconds
    #[1] "16:00:00" "16:01:00" "16:02:00" "16:03:00" ...