我有一个包含睡眠时间和起床时间的数据集,正在寻找一种计算睡眠时间的方法。 我尝试进行数值上的差异,但由于睡眠时间有时被编码为“ 200”,“ 2330”或“ 2445”,因此无法正常工作。
例如
sleeptime wakeuptime
1 200 800
2 2330 730
3 2400 700
4 2200 1100
5 100 1000
6 2445 900
在此先感谢您的帮助。
答案 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])