首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >计算R中的时间差

计算R中的时间差
EN

Stack Overflow用户
提问于 2012-09-29 11:15:14
回答 2查看 94.4K关注 0票数 26

我有一个数据,其中有300多万条记录,其中两个变量是start.time和end.time。前10个obs如下:

代码语言:javascript
复制
   start.date start.time   end.date end.time
1  2012-07-13   15:01:32 2012-07-13 15:02:42
2  2012-07-05   18:26:31 2012-07-05 18:27:19
3  2012-07-14   20:23:21 2012-07-14 20:24:11
4  2012-07-29   16:09:54 2012-07-29 16:10:48
5  2012-07-21   14:58:32 2012-07-21 15:00:17
6  2012-07-04   15:36:31 2012-07-04 15:37:11
7  2012-07-22   18:28:31 2012-07-22 18:28:50
8  2012-07-09   21:08:42 2012-07-09 21:09:02
9  2012-07-05   09:44:52 2012-07-05 09:45:05
10 2012-07-02   18:50:47 2012-07-02 18:51:38

我需要计算start.time和end.time之间的差异。

我使用了以下代码:

代码语言:javascript
复制
mbehave11$diff.time <- difftime(mbehave11$end.time, mbehave11$start.time, units="secs")

但是我得到了这个错误:

代码语言:javascript
复制
Error in as.POSIXlt.character(x, tz, ...) : 
  character string is not in a standard unambiguous format
In addition: Warning messages:
1: In is.na.POSIXlt(strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz)) :
  Reached total allocation of 1535Mb: see help(memory.size)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-29 11:37:55

您必须先将字符串转换为date对象,然后才能进行日期/时间运算。试试这个:

a)读取您的数据:

代码语言:javascript
复制
R> dat <- read.table(textConnection("start.date start.time end.date end.time
2012-07-13   15:01:32 2012-07-13 15:02:42
2012-07-05   18:26:31 2012-07-05 18:27:19 
2012-07-14   20:23:21 2012-07-14 20:24:11"), header=TRUE) 

b)致力于一项观察:

代码语言:javascript
复制
 R>  strptime( paste(dat[,1], dat[,2]), "%Y-%m-%d %H:%M:%S")
 [1] "2012-07-13 15:01:32" "2012-07-05 18:26:31" "2012-07-14 20:23:21" 

c)处理集合,将其转换为数字:

代码语言:javascript
复制
 R> as.numeric(difftime(strptime(paste(dat[,1],dat[,2]),"%Y-%m-%d %H:%M:%S"),
                        strptime(paste(dat[,3],dat[,4]),"%Y-%m-%d %H:%M:%S"))) 
 [1] -70 -48 -50
 R> 

七年后由下面的其他人编辑。

d)为了解释上面的结果-70 -48 -50,请逐行查看示例:

代码语言:javascript
复制
[2012-07-13 15:01:32] - [2012-07-13 15:02:42] = -70 seconds,  
[2012-07-05 18:26:31] - [2012-07-05 18:27:19] = -48 seconds,  
[2012-07-14 20:23:21] - [2012-07-14 20:24:11] = -50 seconds
票数 46
EN

Stack Overflow用户

发布于 2019-04-10 16:37:36

我认为你可以使用lubridate包

它有一个名为ymd_hms的方法

您可以使用它从字符串中获取时间:对于大型数据集,它的速度要快得多

代码语言:javascript
复制
library(lubridate)
dat <- read.table(textConnection("start.date start.time end.date end.time
2012-07-13   15:01:32 2012-07-13 15:02:42
2012-07-05   18:26:31 2012-07-05 18:27:19 
2012-07-14   20:23:21 2012-07-14 20:24:11"), header=TRUE)
starttime = ymd_hms(paste(dat[,1], dat[,2]))
endtime = ymd_hms(paste(dat[,3], dat[,4]))
interval = difftime(endtime,starttime,units = "secs")

或者你可以在一行中完成,但对于大数据集需要更长的时间:

代码语言:javascript
复制
difftime(paste(dat[,3], dat[,4]),paste(dat[,1], dat[,2]),units = "secs")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12649641

复制
相关文章

相似问题

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