2014-05-09 2 views
1

temp라는 data.frame에서 두 개의 연속 된 관찰 사이의 시간 차이를 계산하려고합니다. 나는 시간과 날짜를 모두 가지고 시간 벡터의일 점프 (자정)과 시차

  id version  date  time 
872169 261986  0 2012-01-13 24:24:34 
872170 262026  0 2012-01-13 24:26:11 
872171 262037  0 2012-01-13 00:02:46 
872172 262053  0 2012-01-14 00:10:28 
872173 262074  0 2012-01-14 00:28:42 
872174 262090  0 2012-01-15 14:29:31 

클래스는 물론 times이다. (온도 [6], 단위 = "분") as.difftime

하지만이 일이 얼마나 계정 않습니다 -

수 < : 는 지금은 차이를 포함하는 벡터를 만들 수 있습니까? 몇 가지 시도 : 나는 날짜와 시간을 결합 벡터 :

as.difftime(paste(temp[,4], temp[,6]), unit="min") 

그러나 이것은 단지 나를 제공합니다.

또한

as.difftime(strptime(paste(temp[,4], temp[,6]), "%Y-%m-%d %H:%M:%S"), unit="mins") 

작동하지 않았다.

difftime()도 날짜가 두 개의 별개의 벡터가 아니기 때문에 작동하지 않습니다. 나는 두 번째 날짜 벡터의 첫 번째 값이 첫 번째 날짜 벡터의 두 번째 요소가되도록 날짜 벡터를 복사하고 위쪽으로 이동하는 것을 생각할 수 있습니다. 그러나 더 똑똑한 것이 있어야합니다.

미리 감사드립니다.

+1

은'times'들이 최신의 변화와 함께 ... 24 시간으로, 시간 23H 후 00H를 읽을해야 24 시간 형식으로되어있는 경우 : XX : 놀라운 시간입니다. – OdeToMyFiddle

+0

음, 네 말이 맞습니다. 나는 그 예를 약간 변형시켰다. 그러나 아래 답변이 이미 문제를 처리하고 있기 때문에 이것을 그대로 두겠습니다. – MERose

답변

1

를 사용하여 입력으로 모두 열 : 나는 당신이 잘못된 날짜 - 시간을 한 것으로 파악

> temp <- read.table(text="   id version  date  time 
+ 872169 261986  0 2012-01-13 24:24:34 
+ 872170 262026  0 2012-01-13 24:26:11 
+ 872171 262037  0 2012-01-13 00:02:46 
+ 872172 262053  0 2012-01-14 00:10:28 
+ 872173 262074  0 2012-01-14 00:28:42 
+ 872174 262090  0 2012-01-15 14:29:31", header=TRUE, stringsAsFactors=FALSE) 

# didn't actually need the as.character but you probably have factor variables 

> temp$tm <- as.POSIXct(paste(as.character(temp[[3]]), as.character(temp[[4]]))) 
> temp$count <- c(NA, as.numeric(diff(temp$tm , units="min"))/60) 
> temp 
      id version  date  time   tm count 
872169 261986  0 2012-01-13 24:24:34 2012-01-13 NA 
872170 262026  0 2012-01-13 24:26:11 2012-01-13  0 
872171 262037  0 2012-01-13 00:02:46 2012-01-13  0 
872172 262053  0 2012-01-14 00:10:28 2012-01-14 1440 
872173 262074  0 2012-01-14 00:28:42 2012-01-14  0 
872174 262090  0 2012-01-15 14:29:31 2012-01-15 1440 
; "24"와 "00"을 모두 시간으로 사용합니다. 그건 말이 안돼. 우리는 23 24 년대를 변경하는 경우는 예상대로 작동합니다

> temp$tm <- as.POSIXct(paste(as.character(temp[['date']]), as.character(temp[['time']]))) 
>  temp$count <- c(NA, as.numeric(diff(temp$tm , units="min"))/60) 
> temp 
      id version  date  time     tm  count 
872169 261986  0 2012-01-13 23:24:34 2012-01-13 23:24:34   NA 
872170 262026  0 2012-01-13 23:26:11 2012-01-13 23:26:11 0.02694444 
872171 262037  0 2012-01-13 00:02:46 2012-01-13 00:02:46 -23.39027778 
872172 262053  0 2012-01-14 00:10:28 2012-01-14 00:10:28 24.12833333 
872173 262074  0 2012-01-14 00:28:42 2012-01-14 00:28:42 0.30388889 
872174 262090  0 2012-01-15 14:29:31 2012-01-15 14:29:31 38.01361111