【发布时间】:2020-06-01 18:28:44
【问题描述】:
我正在尝试根据日记中自我报告的两次来计算睡眠持续时间(以小时为单位)。我有 24 小时格式的就寝和起床时间(例如,就睡时间,“23:00”是晚上 11 点,“0:00”是午夜,“1:00”是凌晨 1 点;对于起床时间,“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 ...
【问题讨论】:
-
您好!即使您的问题有点简单地认为是答案,您的问题也可以通过提供minimal reproducible example 的数据得到回答并且更完整。