时间戳的差异

3

我希望计算两个事件之间的时间差。前五列表示事件发生的日期和时间,后五列表示死亡的日期和时间。

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

我想计算时间差(以分钟为单位)。以下代码无法运行。时间戳将类似于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

1
D.HOUR 下,如何同时拥有 024 作为小时数? - David Robinson
好的,发现了。这可能是数据集中的一个错误。已经修复了。 - S Das
更典型的情况是将范围设为0-23,而不是1-24。(第24个小时是否表示在隔天午夜之后?如果不是,那么1是否表示上午12:00,2是否表示上午1:00,以此类推?) - David Robinson
我同意。我已经相应地更改了可重现的示例。 - S Das
2个回答

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)

0
你可以尝试这个:
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更快,而且对于意外数据更安全。您可以在这里阅读更多相关信息。


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