首页 > 解决方案 > 在 R 中将字符串变量(例如“815”)重新编码为时间变量(08:15)

问题描述

我正在寻找帮助重新编码字符串变量以使用 r 正确格式化为时间变量。在一周的时间里,我有大约 450 个人的每日日记数据。他们自我报告了他们的睡觉和起床时间,我正在尝试用数据做两件事:1)查看睡觉和起床时间在一周内的变化,以及 2)计算“睡眠时间”;这些就寝时间和起床时间之间经过的小时数。

我的问题是找到一种重新格式化数据的方法。睡觉和起床时间目前是字符串变量,在 hh 和 mm 之间没有冒号(“815”表示上午 8:15;“2345”表示晚上 11:45;“15”表示上午 12:15)。我不一定在意将 AM/PM 放在那里,如果所有内容都重新格式化为“23:45”之类的东西就可以了。

我无法弄清楚哪个包/功能/创意解决方法最能帮助解决这个问题。我确实看到了一些包,如 chron 或 lubridate,但这些函数似乎对我的第二个问题更有帮助,即计算两个变量之间的时间差。但我确实需要帮助将这个字符串变量重新编码为可用的东西。

感谢您的任何建议或帮助!!!

标签: rdatetime

解决方案


我们可以填充 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"

推荐阅读