Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 时间戳差异_R_Timestamp_Difference_Lubridate - Fatal编程技术网

R 时间戳差异

R 时间戳差异,r,timestamp,difference,lubridate,R,Timestamp,Difference,Lubridate,我想计算两个事件的差异。前五列表示事件发生的日期和时间。其余五列表示死亡日期和时间 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

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

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

为了解析您正在创建的以“-”分隔的格式的日期/时间字符串,您需要提供一个自定义格式,并将其传递给
parse\u date\u 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")
库(lubridate)
dat$tstamp1您可以尝试以下方法:

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)
库(lubridate)

dat$tstamp1您如何将
0
24
作为
D.hour
下的小时?很好。这可能是数据集中的一个错误。修正了。更典型的情况是将0-23作为范围,而不是1-24。(24小时是指第二天午夜之后吗?如果不是,那么1小时是指凌晨12点,2小时是指凌晨1点,依此类推)我同意。我已相应地更改了可复制的示例。
dat$diff <- as.numeric(dat$tstamp2 - dat$tstamp1)
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)