【问题标题】:Difference in Timestamp时间戳差异
【发布时间】:2015-06-27 11:05:52
【问题描述】:

我想计算两个事件的差异。前五列表示事件的日期时间。其余五列表示死亡的日期时间。

dat <- read.table(header=TRUE, text="
YEAR MONTH DAY HOUR MINUTE D.YEAR D.MONTH D.DAY D.HOUR D.MINUTE
2013     1   6    0     55   2013       1     6      0       56
2013     2   3   21     24   2013       2     4     23       14
2013     1   6   11     45   2013       1     6     12       29
2013     3   6   12     25   2013       3     6     23       55
2013     4   6   18     28   2013       5     3     11       18
2013     4   8   14     31   2013       4     8     14       32")
dat
YEAR MONTH DAY HOUR MINUTE D.YEAR D.MONTH D.DAY D.HOUR D.MINUTE
2013     1   6    1     55   2013       1     6      0       56
2013     2   3   21     24   2013       2     4     23       14
2013     1   6   11     45   2013       1     6     12       29
2013     3   6   12     25   2013       3     6     23       55
2013     4   6   18     28   2013       5     3     11       18
2013     4   8   14     31   2013       4     8     14       32

我想计算时间差(in minutes)。以下代码不会去任何地方。时间戳看起来像2013-04-06 04:08

library(lubridate)
dat$tstamp1 <- mdy(paste(dat$YEAR, dat$MONTH, dat$DAY, dat$HOUR, dat$MINUTE,sep = "-"))

dat$tstamp2 <- mdy(paste(dat$D.YEAR, dat$D.MONTH, dat$D.DAY, dat$D.HOUR, dat$D.MINUTE, sep = "-"))

dat$diff <- dat$tstamp2 -dat$tstamp2 ### want the difference in minutes

【问题讨论】:

  • 024 怎么能同时作为 D.HOUR 下的小时?
  • 好收获。这可能是数据集中的错误。修好了。
  • 范围是 0-23 而不是 1-24 会更典型。 (24 小时是否表示第二天午夜之后?如果不是,那么 1 表示 12:00 AM,2 表示 1:00 AM,依此类推?)
  • 我同意。我已经相应地更改了可重现的示例。

标签: r timestamp difference lubridate


【解决方案1】:

为了解析您正在创建的“-”分隔格式的日期/时间字符串,您需要提供自定义格式,并将其传递给parse_date_time。例如:

parse_date_time(paste(dat$D.YEAR, dat$D.MONTH, dat$D.DAY, dat$D.HOUR, dat$D.MINUTE, sep = "-"),
                "%Y-%m-%d-%H-%M")

因此,您的新代码如下所示:

library(lubridate)
dat$tstamp1 <- parse_date_time(paste(dat$YEAR, dat$MONTH, dat$DAY, dat$HOUR, dat$MINUTE, sep = "-"),
                "%Y-%m-%d-%H-%M")
dat$tstamp2 <- parse_date_time(paste(dat$D.YEAR, dat$D.MONTH, dat$D.DAY, dat$D.HOUR, dat$D.MINUTE, sep = "-"),
                                "%Y-%m-%d-%H-%M")

那么以下将为您提供以分钟为单位的时差:

dat$diff <- as.numeric(dat$tstamp2 - dat$tstamp1)

【讨论】:

    【解决方案2】:

    你可以试试这个:

    library(lubridate)
    
    dat$tstamp1 <- strptime(paste(dat$YEAR, dat$MONTH, dat$DAY, dat$HOUR, dat$MINUTE,sep = "-"),"%Y-%m-%d-%H-%M")
    
    dat$tstamp2 <- strptime(paste(dat$D.YEAR, dat$D.MONTH, dat$D.DAY, dat$D.HOUR,  dat$D.MINUTE, sep = "-"),"%Y-%m-%d-%H-%M")
    
    dat$diff <- as.POSIXct(dat$tstamp2) - as.POSIXct(dat$tstamp1)
    

    使用 strptime 可以更快、更安全地处理意外数据。你可以阅读更多关于它的信息here

    【讨论】:

      猜你喜欢
      • 2012-06-03
      • 2018-09-27
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 2015-09-13
      • 2019-04-20
      • 2014-10-19
      相关资源
      最近更新 更多