2015-04-20 18 views
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 

Я хочу, чтобы вычислить разницу времени (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 
+1

Как у вас есть как '0', так и' 24' как час под 'D.HOUR'? –

+0

Хороший улов. Возможно, это ошибка в наборе данных. Починил это. –

+0

Было бы более типичным иметь диапазон 0-23, а не 1-24. (Будет ли 24-й день после полуночи на следующий день? Если нет, тогда будет 1 означает 12:00 AM, а 2 означает 1:00 AM и т. Д.?) –

ответ

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 is быстрее и бит безопаснее от неожиданных данных. Вы можете узнать больше об этом here.

Смежные вопросы