首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >计算睡眠时间

计算睡眠时间
EN

Stack Overflow用户
提问于 2021-11-04 12:01:25
回答 1查看 50关注 1票数 1

我正在从Bed.time和Waking.up.time计算睡眠时间,这两列在一个更大的数据集中。

我将它们转换为新的数据集,并将它们转换为数字数据,省略NAs。

代码语言:javascript
复制
bed <- data.frame(gsub(":","",as.character(proj.data$Bed.time)))
lapply(bed, as.numeric)
colnames(bed)[1]<-"Bed"
#View(bed)

wake <- data.frame(gsub(":","",as.character(proj.data$Waking.up.time)))
lapply(wake, as.numeric)
colnames(wake)[1]<-"Wake"
#View(wake)

timing <-data.frame(bed,wake)
#View(timing)
as.numeric(na.omit(timing$Bed))
as.numeric(na.omit(timing$Wake))

下面是遇到问题的地方,我不相信我的函数(Y)可以工作:

代码语言:javascript
复制
# convert columns to seconds
convert = do.call(data.frame, lapply(timing, lubridate::seconds))

sleeping<- function(x){
  (as.numeric(substring(1,2)) * 60) + as.numeric(substring(3,4))
}
sleeping2<- function(y){
  (as.numeric(substring(1,2)) * 60) - as.numeric(substring(3,4))
}

在ifelse语句中,如果wake值大于Bed,则应用my function(x)和Wake(x2) - Bed(x[1])。使用我的y函数,我尝试做相反的床(x[1])-唤醒(X2)。

代码语言:javascript
复制
# get time diff
timing$time_slept <- ifelse(timing$Wake > timing$Bed, apply(convert, 1, function(x) x[2] - x[1]), apply(convert, 1, function(y) y[1] - y[2]))
View(timing)

但是,数据输出(计时)如下所示:

在某些情况下,我的计算是成功的,但在另一些情况下,正如您可以看到的那样,值是以错误的顺序相互减去的,例如第1行2345-0645=1700

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-04 12:59:51

1-将字符向量转换为日期-时间对象

代码语言:javascript
复制
bed <- lubridate::parse_date_time(bed, '%H%M')
wake <- lubridate::parse_date_time(wake, '%H%M')

2-计算时间差

代码语言:javascript
复制
time_diff <- wake - bed

3-通过添加24小时来更正负值。

代码语言:javascript
复制
time_diff_corrected <- ifelse(time_diff < 0, time_diff + 24, time_diff)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69838922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档