gpt4 book ai didi

r - 从R中没有日期的两个时间值计算持续时间

转载 作者:行者123 更新时间:2023-12-04 04:17:39 24 4
gpt4 key购买 nike

我正在尝试根据日记中 self 报告的两次来计算 sleep 持续时间(以小时为单位)。我有 24 小时格式的就寝和起床时间(例如,对于就寝时间,“23:00”是晚上 11 点,“0:00”是午夜,“1:00”是凌晨 1 点;对于起床时间,“9: 00"是上午 9 点)。我认为 difftime 函数可以很好地提取 sleep 持续时间,但我在某些情况下遇到了问题。

df$duration2<-difftime(df$Waketime2, df$Bedtime2, units="hours")

在运行上面的语法时,它正确地计算了这个人在午夜或晚些时候上床 sleep 的情况的持续时间。当就寝时间在午夜之前时,问题就出现了——(我认为)因为从技术上讲,这是不同日期的时间,这会把事情搞砸。对于这些情况,此语法将返回一个负数。

(difftime (8:00, 0:00)) 

会返回 8,但是

(difftime (6:45,23:00)) 

将返回 -16.25。

我没有与时间相对应的日期数据,只有时间值,但我知道顺序是这样的,如果一个人在午夜后上床 sleep ,则假定醒来时间是在同一天.

感谢您的帮助!!

这个函数很有意义,但它为我提供了 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

数据。

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")

关于r - 从R中没有日期的两个时间值计算持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60268964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com