r - R中的减法时间
问题描述
我想计算一个人晚上在床上花费的时间。第一列,j1bed(睡觉时间):
dput(head(subscales$j1bed, 20))
c("23:00:00", "01:00:00", "22:00:00", "00:00:00", "00:00:00",
"23:00:00", "03:00:00", "23:00:00", "22:00:00", "23:00:00", "21:00:00",
"23:30:00", "22:00:00", "22:00:00", "20:00:00", "22:00:00", "22:00:00",
"21:00:00", "20:00:00", "23:00:00")
第二列,j3wake(时间唤醒):
dput(head(subscales$j3wake, 20))
c("08:00:00", "08:00:00", "05:00:00", "08:00:00", "07:00:00",
"07:00:00", "09:00:00", "09:00:00", "08:00:00", "06:00:00", "03:00:00",
"08:30:00", "07:00:00", "08:00:00", "09:00:00", "07:00:00", "06:00:00",
"07:00:00", "07:00:00", "12:00:00")
我的代码目前如下:
Hours_in_Bed<- as.numeric(difftime(strptime(subscales$j3wake, "%I:%M %p" ),strptime(subscales$j1bed, "%I:%M %p" ),units='hours'))
出于某种原因,这只是提出了“NA”。有任何想法吗?
编辑:我尝试了以下三个建议:1)
result1<-strptime(subscales$j3wake, "%I:%M %p")
result2<-strptime(subscales$j1bed, "%I:%M %p")
Hours_in_Bed<-as.numeric(difftime(result2, result1, units='hours'))
这仅产生“NA”。2)
subscales$j3wake1=as.POSIXct(paste('1970-1-1',subscales$j3wake))
subscales$j1bed1 =as.POSIXct(paste('1970-1-1',subscales$j1bed))
as.numeric(difftime(subscales$j1bed1,subscales$j3wake1,units='hours'))
这产生“0”。3)
all(grepl("[0-9]{2}:[0-9]{2} (AM|PM)", subscales$j3wake))
all(grepl("[0-9]{2}:[0-9]{2} (AM|PM)", subscales$j1bed))
两者都产生“错误”。
编辑 2:最后一个提示是关键!我想我应该改用“%H:%M”:
Hours_in_Bed<- as.numeric(difftime(strptime(subscales$j3wake, "%H:%M" ),strptime(subscales$j1bed, "%H:%M" ),units='hours'))
如果我这样做:
Hours_in_Bed[!is.na(Hours_in_Bed) & Hours_in_Bed<0] <- 24 + Hours_in_Bed[!is.na(Hours_in_Bed) & Hours_in_Bed<0]
我应该可以走了。让我知道我是否仍然关闭,并感谢您的帮助!
解决方案
即使没有任何真正的年/月/日,通常也更容易使用 POSIXct 类型。例子:
subscales$j3wake1 = as.POSIXct(paste('1970-1-1',subscales$j3wake))
subscales$j1bed1 = as.POSIXct(paste('1970-1-1',subscales$j1bed))
as.numeric(difftime(subscales$j1bed1,subscales$j3wake1,units='hours'))
推荐阅读
- javascript - JavaScript打印数组结果在同一个文件中
- java - Google People API - 如何删除联系人的文字生日?
- java - JaxbAnnotationIntrospector ClassNotFound 在第一次调用
- reactjs - 创建逻辑以将数据传递到反应导航上的前一个屏幕时,TS lint 触发错误
- python - 如何用python根据主题对英语单词进行分类?
- multithreading - C++11:是否有任何用户相关的线程 ID?
- php - 使用php的小时和分钟总和之间的差异
- android-studio - 从 Url 下载 .apk 并安装 apk
- magento2 - 有谁知道为什么 product_id 不再保存在 sales_order_item 表中?
- javascript - 正则表达式替换一系列空格