2017-04-20 3 views
0

는 I는 다음과 같이 dataframe있다 :R에서 두 사건 사이의 시간차를 찾는 방법?

time event name 
00:09:45 OUT: abc 
00:09:55 IN:  abc 
03:14:52 OUT: abc 
03:15:02 IN:  abc 
03:37:08 OUT: abc 
03:37:17 IN:  abc 
03:39:17 OUT: abc 
03:39:26 IN:  abc 

제가 처음 OUT 및 IN 사이에서 10 초, 제 OUT 및 IN 사이에서 10 초를 가지고 OUT 사이 및 시간 차이를 계산하고 싶다. 가능한 방법이 있습니까?

답변

1

아래 data.table

df<-read.table(text="time event name 
00:09:45 OUT: abc 
00:09:55 IN:  abc 
03:14:52 OUT: abc 
03:15:02 IN:  abc 
03:37:08 OUT: abc 
03:37:17 IN:  abc 
03:39:17 OUT: abc 
03:39:26 IN:  abc",header=T) 

library(data.table) 
setDT(df) 
df[,id:=rep(1:(length(.I)/2),each=2)] 
dfs<-dcast(df,name+id~event,value.var = "time") 
dfs[,Difference:=difftime(strptime(`IN:`, "%H:%M:%S"),strptime(`OUT:`, "%H:%M:%S"))] 

dfs 
name id  IN:  OUT: Difference 
1: abc 1 00:09:55 00:09:45 10 secs 
2: abc 2 03:15:02 03:14:52 10 secs 
3: abc 3 03:37:17 03:37:08  9 secs 
4: abc 4 03:39:26 03:39:17  9 secs 
+2

테이블을 'fread' ...'df [, diff (as.ITime (시간)), by = rep (1 : nrow (df), 각각 = 2, length.out = nrow (df))] ' – Frank

+0

예, 더 우아합니다 :) –

-1
library(dplyr) 

# create data 

df <- structure(list(time = structure(c(0.00677083333333333, 0.00688657407407407, 
             0.135324074074074, 0.135439814814815, 0.150787037037037, 0.150891203703704, 
             0.152280092592593, 0.152384259259259), 
             format = "h:m:s", class = "times"), 
        event = structure(c(2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L), 
             .Label = c("IN:", "OUT:"), class = "factor"), 
        name = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "abc", class = "factor")), class = "data.frame", .Names = c("time", "event", "name"), row.names = c(NA, -8L)) 

# process 

df %>% mutate(diff = time - lag(time)) %>% 
filter(event == "IN:") 
+0

하나의 옵션은 여러 가지가있을 수 있습니다 어디에서 클래스'times'come합니까? – Uwe

관련 문제