Home > database >  Time difference from 2 different columns in R
Time difference from 2 different columns in R

Time:01-13

I have a problem calculating a time difference between 2 different columns. Here are my data:

SleeT WakeT day
2021-03-14 00:59:30 2021-03-14 07:30:30 1
2021-03-15 04:37:45 2021-03-15 10:08:15 2
2021-03-16 01:24:15 2021-03-16 09:27:30 3
2021-03-17 04:45:45 2021-03-17 14:16:00 4

I manage to calculate the sleep time (difference between SleepT and WakeT from the same day) like that:

Acti <- mutate(Acti, Sleeptime=difftime(WakeT, SleepT, units="sec"))

Now I would like to calculate wake time, meaning the difference between "WakeT" from day n and "SleepT" from day n 1

Any idea? Thank you!

CodePudding user response:

One way, I transformed the dates using lubridate, maybe you already did something similar

df=read.table(text="
SleeT   WakeT   day
'2021-03-14 00:59:30'   '2021-03-14 07:30:30'   1
'2021-03-15 04:37:45'   '2021-03-15 10:08:15'   2
'2021-03-16 01:24:15'   '2021-03-16 09:27:30'   3
'2021-03-17 04:45:45'   '2021-03-17 14:16:00'   4",h=T)

library(lubridate)
df$SleeT=as_datetime(df$SleeT)
df$WakeT=as_datetime(df$WakeT)

difftime(tail(df$SleeT,-1),head(df$WakeT,-1),units="secs")

Time differences in secs
[1] 76035 54960 69495

CodePudding user response:

I think this is what you're looking for? Ive used lag in dplyr

    df <- data.frame(sleeT = c("2021-03-14 00:59:30","2021-03-15 04:37:45","2021-03-16 01:24:15"), WakeT = c("2021-03-14 07:30:30","2021-03-15 10:08:15","2021-03-16 09:27:30"), day = c(1,2,3))
 df$sleeT <- as.POSIXct(df$sleeT)
 df$WakeT <- as.POSIXct(df$WakeT)
    df

   sleeT               WakeT day
1 2021-03-14 00:59:30 2021-03-14 07:30:30   1
2 2021-03-15 04:37:45 2021-03-15 10:08:15   2
3 2021-03-16 01:24:15 2021-03-16 09:27:30   3

   
   df %>% mutate(gap = sleeT - lag(WakeT,n=1))

Output:

               sleeT               WakeT day            gap
    1 2021-03-14 00:59:30 2021-03-14 07:30:30   1       NA hours
    2 2021-03-15 04:37:45 2021-03-15 10:08:15   2 21.12083 hours
    3 2021-03-16 01:24:15 2021-03-16 09:27:30   3 15.26667 hours
  •  Tags:  
  • Related