如何使用睡眠和唤醒时间计算睡眠时间

时间:2020-01-05 17:57:03

标签: r

我有一个包含睡眠时间和起床时间的数据集,正在寻找一种计算睡眠时间的方法。 我尝试进行数值上的差异,但由于睡眠时间有时被编码为“ 200”,“ 2330”或“ 2445”,因此无法正常工作。

例如

   sleeptime    wakeuptime
1   200       800
2   2330      730
3   2400      700
4   2200      1100
5   100       1000
6   2445      900

在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是另一种考虑的方法。

您可以编写一个函数,将数字时间转换/格式化为字符串并计算分钟数。

然后,由于时间是午夜,所以您可以使用ifelse语句来确定时差(以分钟为单位)。

mins_since_MN <- function(x) {
  str_time <- sprintf("%04.0f", x)
  (as.numeric(substring(str_time, 1, 2)) * 60) + as.numeric(substring(str_time, 3, 4)) 
}

df2 <- as.data.frame(sapply(df, mins_since_MN))

with(df2, ifelse(sleeptime > wakeuptime, wakeuptime - sleeptime + (60 * 24), wakeuptime - sleeptime))
[1] 360 480 420 780 540 495

数据

df = data.frame(
  sleeptime = c(200, 2330, 2400, 2200, 100, 2445),
  wakeuptime = c(800, 730, 700, 1100, 1000, 900)
)

答案 1 :(得分:0)

这是一种方法:

library(lubridate)

# sample df
df = data.frame(sleeptime = c(200, 2330, 2400, 2200, 100, 2445),
                wakeuptime = c(800, 730, 700, 1100, 1000, 900))

# convert columns to seconds
df = do.call(data.frame, lapply(df, lubridate::seconds))

# get time diff
df$diff <- apply(df, 1, function(x) x[2] - x[1])