R中的difftime无法正确计算

时间:2018-05-24 20:23:18

标签: r date data-science posixct difftime

我试图找出两个小时之间的差异,以及在超过一天的时间内发生的时间差异,我变得非常离谱和不正确的数字。

以下是数据示例:

     Observation    Status       DateTime                                
     1               Active     2016-11-04 22:32:49                 
     2              Inactive    2016-11-05 08:30:56   

我正在运行此命令:

      getDiff <- function(x) {
      difftime(shift(x, fill = NA, type = "lead"), x, units = "hours")
       }

   diff_result <- dataframe[, time.diff := ifelse(Status == "Active", 
                                         getDiff(DateTime), NA)]

我得到以下输出:

   Observation    Status       DateTime                   Time.diff             
   1               Active     2016-11-04 22:32:49       8757.884          
   2              Inactive    2016-11-05 08:30:56   

此命令适用于在不同日期不会发生的所有其他差异。 正确答案应该是10个小时左右,而不是8000个以上。

另外,

    > class(DataFrame$DateTime)
   [1] "POSIXct" "POSIXt"

提前谢谢!

1 个答案:

答案 0 :(得分:1)

OP似乎没有正确转换DateTime格式。 8757小时相当于大约1年。因此,DateTime可能格式错误。

在我的结尾使用OP的数据看起来很好。

library(data.table)

getDiff <- function(x) {
  difftime(shift(x, fill = NA, type = "lead"), x, units = "hours")
}
setDT(df)
diff_result <- df[, time.diff := ifelse(Status == "Active", 
                                               getDiff(DateTime), NA)]


diff_result
#    Observation   Status            DateTime time.diff
# 1:           1   Active 2016-11-04 22:32:49  9.968611
# 2:           2 Inactive 2016-11-05 08:30:56        NA
# 

数据:

df <- read.table(text = 
"Observation    Status       DateTime                                
1               Active     '2016-11-04 22:32:49'                 
2              Inactive    '2016-11-05 08:30:56'",
header = TRUE, stringsAsFactors = FALSE)

df$DateTime = as.POSIXct(df$DateTime, format = "%Y-%m-%d %H:%M:%S")