phaser
phaser

Reputation: 625

R: Calculate time intervals

If I have a vector of dates and hours such as...

c("2016-03-15 13","2016-03-16 23","2016-03-17 06","2016-03-18 15","2016-03-19 08","2016-03-20 21")

Can I find the number of hours that pass between each timestamp? I looked into difftime but it requires 2 vectors.

Upvotes: 2

Views: 3337

Answers (2)

Vijay_Shinde
Vijay_Shinde

Reputation: 1352

You can do this by using strptime() function.

Try something like this.

data <- c("2016-03-15 13","2016-03-16 23","2016-03-17 06","2016-03-18 15","2016-03-19 08","2016-03-20 21")
datevec <- strptime(data,"%Y-%m-%d %H")
difftime(datevec[-length(datevec)],datevec[-1],units="hours")

Here is the output.

> difftime(datevec[-length(datevec)],datevec[-1],units="hours")
Time differences in hours
[1] -34  -7 -33 -17 -37

Upvotes: 2

akrun
akrun

Reputation: 886948

We can do this after converting to 'DateTime' class using lubridate, then get the difference in 'hour' between adjacent elements using difftime by passing two vectors after removing the last and first observation in the vector

library(lubridate)
v2 <- ymd_h(v1)

Or a base R option is as.POSIXct

v2 <- as.POSIXct(v1, format = "%Y-%m-%d %H")

and then do the difftime

difftime(v2[-length(v2)], v2[-1], unit = "hour")

data

v1 <- c("2016-03-15 13","2016-03-16 23","2016-03-17 06",
             "2016-03-18 15","2016-03-19 08","2016-03-20 21")

Upvotes: 5

Related Questions