Я пытаюсь рассчитать продолжительность сна, в часах, из двух самоотчетов в дневнике. У меня время сна и бодрствования в 24-часовом формате (например, для времени сна "23:00" - это 11:00, "0:00" - полночь, "1:00" - 1:00; для времени пробуждения "9: 00 "это 9 утра). Я думал, что функция difftime будет полезна для извлечения продолжительности сна, но я сталкиваюсь с проблемой в некоторых случаях.
df$duration2<-difftime(df$Waketime2, df$Bedtime2, units="hours")
При использовании приведенного выше синтаксиса он правильно рассчитывает продолжительность для случаев, когда человек ложился спать в полночь позже. Проблема возникает, когда время ложиться спать до полуночи - (я думаю), потому что это технически время в другой день, которое все портит. В этих случаях этот синтаксис будет возвращать отрицательное число.
(difftime (8:00, 0:00))
вернет 8, но
(difftime (6:45,23:00))
вернет -16.25.
У меня нет данных для даты, которая соответствует времени, только значения времени, но я знаю, что последовательность такова, что, если кто-то ложится спать после полуночи, предполагается, что время пробуждения будет включено в тот же день.
Спасибо за любую помощь !!
Эта функция имеет смысл, но она дает мне 0 значений для разницы во времени в часах (сначала она показала 0 для всей длительности в секундах, поэтому я изменила ее на часы в своем коде ниже). Я также вставляю структуру моих переменных времени сна и бодрствования в надежде, что это поможет.
sleepTime <- function(bed, wake){
wake <- paste(Sys.Date(), wake)
tmpbed <- paste(Sys.Date(), bed)
adjust <- -(difftime(wake, tmpbed) < 0)
tmpbed <- paste(Sys.Date() + adjust, bed)
difftime(wake, tmpbed, units="hours")
}
df$Duration2<-sleepTime(df$Bedtime2, df$Waketime2)
df$sTST2
Time differences in hours
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[67] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[133] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
str(S2trim$Bedtime2)
'ITime' int [1:436] 23:00:00 NA 23:00:00 21:00:00 22:30:00 21:30:00 00:00:00 22:30:00 23:45:00 22:30:00 ...
str(S2trim$Waketime2)
'ITime' int [1:436] 06:45:00 06:05:00 07:00:00 10:00:00 06:30:00 05:30:00 07:15:00 07:10:00 NA 05:30:00 ...