我正在寻找帮助编码一个字符串变量,以正确格式化为一个时间变量使用r。我有大约450个人的每日日记数据,在一个星期的过程中。他们自我报告了自己的床和醒来时间,我试着用数据做两件事: 1)看床和醒时在一周内的变化情况,2)计算“睡眠时间”;这些床和醒来时间之间的间隔小时数。
我的问题是找到一种重新格式化数据的方法。床和唤醒时间目前是字符串变量,在hh和mm之间没有冒号("815“表示上午8:15;"2345”表示晚上11:45;"15“表示12:15 AM)。我不一定关心调幅/PM在那里,如果一切都被重新格式化为"23:45“,那就好了。
我不知道哪种包/功能/创造性的解决方案最好能在这方面有所帮助。我确实看到了一些包,如chron或lubridate,但这些函数似乎对我的第二个问题更有帮助,即计算这两个变量之间的时间差。但是我确实需要帮助将这个字符串变量重新编码为一些有用的东西。
感谢您的任何建议或帮助!
发布于 2020-02-15 17:46:49
我们可以使用pad 0来生成宽度4,然后使用as.ITime转换为Time类。
library(stringr)
library(data.table)
out <- as.ITime(str_replace(str_pad("815", width = 4, pad = 0), "(\\d{2})", "\\1:"))
str(out)
#'ITime' int 08:15:00
out
#[1] "08:15:00"或者使用base R
strptime(sub("(\\d{2})", "\\1:", sprintf("%04s", "815")), format = '%H:%M')
#[1] "2020-02-15 08:15:00 EST"发布于 2020-02-15 20:04:53
假设我们有这样的时间:
times <- c("345", "600", "1159", "1502", "2359")然后我们可以定义一个简单的函数:
as_time <- function(t) gsub("(^\\d:)", "0\\1", gsub("(\\d{2}$)", ":\\1", t))所以我们可以
as_time(times)
#> [1] "03:45" "06:00" "11:59" "15:02" "23:59"https://stackoverflow.com/questions/60241436
复制相似问题