首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串变量(例如"815")重新编码为R中的时间变量(08:15)

将字符串变量(例如"815")重新编码为R中的时间变量(08:15)
EN

Stack Overflow用户
提问于 2020-02-15 17:44:57
回答 2查看 55关注 0票数 1

我正在寻找帮助编码一个字符串变量,以正确格式化为一个时间变量使用r。我有大约450个人的每日日记数据,在一个星期的过程中。他们自我报告了自己的床和醒来时间,我试着用数据做两件事: 1)看床和醒时在一周内的变化情况,2)计算“睡眠时间”;这些床和醒来时间之间的间隔小时数。

我的问题是找到一种重新格式化数据的方法。床和唤醒时间目前是字符串变量,在hh和mm之间没有冒号("815“表示上午8:15;"2345”表示晚上11:45;"15“表示12:15 AM)。我不一定关心调幅/PM在那里,如果一切都被重新格式化为"23:45“,那就好了。

我不知道哪种包/功能/创造性的解决方案最好能在这方面有所帮助。我确实看到了一些包,如chron或lubridate,但这些函数似乎对我的第二个问题更有帮助,即计算这两个变量之间的时间差。但是我确实需要帮助将这个字符串变量重新编码为一些有用的东西。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-15 17:46:49

我们可以使用pad 0来生成宽度4,然后使用as.ITime转换为Time类。

代码语言:javascript
复制
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

代码语言:javascript
复制
strptime(sub("(\\d{2})", "\\1:", sprintf("%04s", "815")), format = '%H:%M')
#[1] "2020-02-15 08:15:00 EST"
票数 1
EN

Stack Overflow用户

发布于 2020-02-15 20:04:53

假设我们有这样的时间:

代码语言:javascript
复制
times <- c("345", "600", "1159", "1502", "2359")

然后我们可以定义一个简单的函数:

代码语言:javascript
复制
as_time <- function(t) gsub("(^\\d:)", "0\\1", gsub("(\\d{2}$)", ":\\1", t))

所以我们可以

代码语言:javascript
复制
as_time(times)
#> [1] "03:45" "06:00" "11:59" "15:02" "23:59"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60241436

复制
相关文章

相似问题

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