[英]How do I find the mid time between two times in R, sometimes overnight, sometimes same day, but I have no date?
我想在我的 6000 名参与者的数据框中找到 SLQ300(睡眠时间)和 SLQ310(唤醒时间)列中两次之间的中间时间。 补充:我已经在 SLD012 列中有持续时间。 因此,如果我们可以将一半的持续时间添加到睡眠时间,那就太好了。
例如。 在第一行中,它应该是 23:00 和 07:00 之间的中点,即 03:00。
而在第 9 行,应该是在 01:00 到 06:00 之间,也就是 03:30。
先感谢您!
尝试这个:
time2num <- function(x) {
vapply(strsplit(x, ':'), function(y) sum(as.numeric(y) * c(60, 1)),
numeric(1), USE.NAMES=FALSE)
}
# sample data
dat <- data.frame(id=1:2, tm1=c("23:00","01:00"), tm2=c("07:00","06:00"))
# the code
dat[,c("tm1n","tm2n")] <- lapply(dat[,c("tm1","tm2")], time2num)
dat
# id tm1 tm2 tm1n tm2n
# 1 1 23:00 07:00 1380 420
# 2 2 01:00 06:00 60 360
with(dat, ifelse(tm1n > tm2n, 24*60, 0) + tm2n - tm1n)
# [1] 480 300 ### minutes
或者您可以使用模数:
with(dat, tm2n - tm1n) %% (12*60)
(虽然我还没有在各种组合中测试过它)。
和中间时间:
format(as.POSIXct(paste(Sys.Date(), dat$tm1)) +
60*with(dat, ifelse(tm1n > tm2n, 24*60, 0) + tm2n - tm1n)/2,
format="%H:%M")
# [1] "03:00" "03:30"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.