根据R中没有日期的两个时间值计算持续时间

2023-12-06

我正在尝试根据日记中的两次自我报告来计算睡眠持续时间(以小时为单位)。我有 24 小时格式的就寝时间和起床时间(例如,对于就寝时间,“23:00”是晚上 11 点,“0:00”是午夜,“1:00”是凌晨 1 点;对于起床时间,“9:00”是上午 1 点) 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 ...

这是一个 hack,但它确实有效。至少对于发布的输入数据来说是这样。

sleepTime <- function(bed, wake){
  wake <- paste(Sys.Date(), wake)
  tmpbed <- paste(Sys.Date(), bed)
  d <- apply(data.frame(tmpbed, wake), 1, function(x) difftime(x[2], x[1], units = "hours"))
  adjust <- -(d < 0)
  tmpbed <- paste(Sys.Date() + adjust, bed)
  apply(data.frame(tmpbed, wake), 1, function(x) difftime(x[2], x[1], units = "hours"))
}

bedtime2 <- c("0:00", "23:00")
waketime2 <- c("8:00", "6:45")
sleepTime(bedtime2, waketime2)
#[1]  8.00 7.75

另一个例子,数据在str问题中发布的输出。

sleepTime(bedtime, waketime)
# [1]  7.750000  6.083333  8.000000 13.000000  8.000000  8.000000
# [7]  7.250000  8.666667  0.250000  7.000000

Data.

bedtime <-
c("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")

waketime <-
c("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:0")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据R中没有日期的两个时间值计算持续时间 的相关文章

随机推荐