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
