2016-09-28 2 views
-1

TRUE/FALSE 열을 만들기 위해 행의 시간 요소를 평가하려고합니다. 예를 들어 : 기본적으로행 요소 사이의 시간 계산

v1 = TRUE if 7:45<time(datetime)<8:15 
AND v1 = TRUE if 23:45<time(datetime)<0:15 (next day) 
ELSE = FALSE 

, 내가 dplyr::mutate(between, a, b)가하는 것과 유사한 무언가를 찾고 있어요,하지만 그 시간을 이해 :

datetime 
10/10/15 0:45 
10/1/15 0:45 
10/10/15 0:30 
10/1/15 0:30 
10/10/15 0:15 
10/1/15 0:15 
10/10/15 0:00 
10/1/15 0:00 
10/10/15 10:45 
10/10/15 1:45 
10/10/15 10:30 
10/10/15 1:30 
10/10/15 10:15 
10/10/15 1:15 
10/10/15 11:45 
10/10/15 11:30 
10/10/15 11:15 
10/10/15 11:00 
10/10/15 12:45 
10/10/15 12:30 
10/10/15 12:15 
10/10/15 12:00 
10/10/15 13:45 
10/10/15 13:30 
10/10/15 13:15 
10/10/15 14:45 
10/10/15 14:30 
10/10/15 14:15 
10/10/15 14:00 
10/10/15 15:45 
10/10/15 15:30 
10/10/15 15:15 
10/10/15 15:00 
10/10/15 16:45 
10/10/15 16:30 
10/10/15 16:15 
10/10/15 17:45 
10/10/15 17:30 
10/10/15 17:15 
10/10/15 17:00 
10/10/15 18:45 
10/10/15 18:30 
10/10/15 18:15 
10/10/15 18:00 
10/10/15 19:45 
10/10/15 19:30 
10/10/15 19:15 
10/10/15 20:45 
10/10/15 2:45 
10/10/15 20:30 
10/10/15 2:30 
10/10/15 20:15 
10/10/15 2:15 
10/10/15 20:00 
10/10/15 2:00 
10/10/15 21:45 
10/10/15 21:30 
10/10/15 21:15 
10/10/15 21:00 
10/10/15 22:45 
10/10/15 22:30 
10/10/15 22:15 
10/10/15 23:45 
10/10/15 23:30 
10/10/15 23:15 
10/10/15 23:00 
10/10/15 3:45 
10/10/15 3:30 
10/10/15 3:15 
10/10/15 3:00 
10/10/15 4:45 
10/10/15 4:30 
10/10/15 4:15 
10/10/15 5:45 
10/10/15 5:30 
10/10/15 5:15 
10/10/15 5:00 
10/10/15 6:45 
10/10/15 6:30 
10/10/15 6:15 
10/10/15 6:00 
10/10/15 7:45 
10/10/15 7:30 
10/10/15 7:15 
10/10/15 8:45 
10/10/15 8:30 
10/10/15 8:15 
10/10/15 8:00 
10/10/15 9:45 
10/10/15 9:30 
10/10/15 9:15 
10/10/15 9:00 
10/1/15 10:45 
10/1/15 1:45 
10/1/15 10:30 
10/1/15 1:30 
10/1/15 10:15 
10/1/15 1:15 
10/1/15 10:00 
10/11/15 10:45 

가정하자 나는 변수가되도록합니다. 내 데이터로 저장됩니다

은 다음과 같습니다

$ datetime    : POSIXct, format: "2015-10-10 00:45:00" "2015-10-01 00:45:00" "2015-10-10 00:30:00" "2015-10-01 00:30:00" ... 
$ year     : int 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 ... 
$ month     : int 10 10 10 10 10 10 10 10 10 10 ... 
$ day     : int 10 1 10 1 10 1 10 1 10 10 ... 
$ minute    : int 45 45 30 30 14 14 0 0 44 44 ... 
+0

, 나는 중간 단계의 많은 첫 번째 원칙에서 거기에 도착하는 방법을 알고있다. 좀 더 우아하고 컴팩트 한 솔루션을 찾고 있습니다. –

+0

재현 가능한 예제를 주거나'dput'을 사용하십시오 – statquant

답변

1

데이터는

   datetime v1 
1: 2010-10-15 01:45:00 TRUE 
2: 2010-01-15 00:45:00 FALSE 
3: 2010-10-15 01:30:00 FALSE 
4: 2010-01-15 00:30:00 FALSE 
... 
+0

거의 작동합니다. 임씨가 구문을 이해하려고하는데 왜 CSV에서는 작동하지만 데이터 프레임에서는 작동하지 않는지 알아낼 수 있습니다. –

+0

왜냐하면 data.table을 사용하기 때문에 do data = as.data.table (귀하의 data.frame) – statquant

1

을 원하는 당신은 시간을 조정해야 test.csv

library(data.table) 
library(fasttime) 
data = fread('test.csv',header = TRUE,sep='\n') 
data[,datetime:=fastPOSIXct(datetime)] 
data[,v1:=FALSE][as.ITime(datetime) %between% as.ITime(c('01:45','08:45')) | as.ITime(datetime) %between% as.ITime(c('23:45','23:59')), v1:=TRUE] 

라는 CSV에있는 경우 날짜가 아닌 시간을 비교하려는 경우 날짜 - 시간을 모두 하나의 날짜로 변환 할 수 있습니다 (예 : 날짜)를 strftime 다음에 as.POSIXct으로 입력 한 다음 시간을 비교하십시오. dplyr 사용 :

library(dplyr) 
result <- df %>% mutate(hm = as.POSIXct(strftime(datetime, format="%H:%M"),format="%H:%M"), 
         v1 = ifelse((as.POSIXct("7:45", format="%H:%M") < hm & hm < as.POSIXct("8:15", format="%H:%M")) | 
            (as.POSIXct("23:45", format="%H:%M") < hm & hm < as.POSIXct("0:15", format="%H:%M")), 
            TRUE, FALSE)) %>% 
       select(-hm) 

먼저 datetime에서 그러나 오늘로 설정 한 날짜와 시간을있는 열 hm을 만들 수 있습니다. 그런 다음 조건에 ifelse을 사용하여 범위 내의 시간을 비교하십시오. 당신의 공급 된 데이터 (데이터 프레임 df으로 만 datetime 열)로 : 난 그 말을해야

print(result) 
##    datetime v1 
##1 2015-10-10 00:45:00 FALSE 
##2 2015-10-01 00:45:00 FALSE 
##3 2015-10-10 00:30:00 FALSE 
##4 2015-10-01 00:30:00 FALSE 
##5 2015-10-10 00:15:00 FALSE 
##6 2015-10-01 00:15:00 FALSE 
##7 2015-10-10 00:00:00 FALSE 
##8 2015-10-01 00:00:00 FALSE 
##9 2015-10-10 10:45:00 FALSE 
##10 2015-10-10 01:45:00 FALSE 
##11 2015-10-10 10:30:00 FALSE 
##12 2015-10-10 01:30:00 FALSE 
##13 2015-10-10 10:15:00 FALSE 
##14 2015-10-10 01:15:00 FALSE 
##15 2015-10-10 11:45:00 FALSE 
##16 2015-10-10 11:30:00 FALSE 
##17 2015-10-10 11:15:00 FALSE 
##18 2015-10-10 11:00:00 FALSE 
##19 2015-10-10 12:45:00 FALSE 
##20 2015-10-10 12:30:00 FALSE 
##21 2015-10-10 12:15:00 FALSE 
##22 2015-10-10 12:00:00 FALSE 
##23 2015-10-10 13:45:00 FALSE 
##24 2015-10-10 13:30:00 FALSE 
##25 2015-10-10 13:15:00 FALSE 
##26 2015-10-10 14:45:00 FALSE 
##27 2015-10-10 14:30:00 FALSE 
##28 2015-10-10 14:15:00 FALSE 
##29 2015-10-10 14:00:00 FALSE 
##30 2015-10-10 15:45:00 FALSE 
##31 2015-10-10 15:30:00 FALSE 
##32 2015-10-10 15:15:00 FALSE 
##33 2015-10-10 15:00:00 FALSE 
##34 2015-10-10 16:45:00 FALSE 
##35 2015-10-10 16:30:00 FALSE 
##36 2015-10-10 16:15:00 FALSE 
##37 2015-10-10 17:45:00 FALSE 
##38 2015-10-10 17:30:00 FALSE 
##39 2015-10-10 17:15:00 FALSE 
##40 2015-10-10 17:00:00 FALSE 
##41 2015-10-10 18:45:00 FALSE 
##42 2015-10-10 18:30:00 FALSE 
##43 2015-10-10 18:15:00 FALSE 
##44 2015-10-10 18:00:00 FALSE 
##45 2015-10-10 19:45:00 FALSE 
##46 2015-10-10 19:30:00 FALSE 
##47 2015-10-10 19:15:00 FALSE 
##48 2015-10-10 20:45:00 FALSE 
##49 2015-10-10 02:45:00 FALSE 
##50 2015-10-10 20:30:00 FALSE 
##51 2015-10-10 02:30:00 FALSE 
##52 2015-10-10 20:15:00 FALSE 
##53 2015-10-10 02:15:00 FALSE 
##54 2015-10-10 20:00:00 FALSE 
##55 2015-10-10 02:00:00 FALSE 
##56 2015-10-10 21:45:00 FALSE 
##57 2015-10-10 21:30:00 FALSE 
##58 2015-10-10 21:15:00 FALSE 
##59 2015-10-10 21:00:00 FALSE 
##60 2015-10-10 22:45:00 FALSE 
##61 2015-10-10 22:30:00 FALSE 
##62 2015-10-10 22:15:00 FALSE 
##63 2015-10-10 23:45:00 FALSE 
##64 2015-10-10 23:30:00 FALSE 
##65 2015-10-10 23:15:00 FALSE 
##66 2015-10-10 23:00:00 FALSE 
##67 2015-10-10 03:45:00 FALSE 
##68 2015-10-10 03:30:00 FALSE 
##69 2015-10-10 03:15:00 FALSE 
##70 2015-10-10 03:00:00 FALSE 
##71 2015-10-10 04:45:00 FALSE 
##72 2015-10-10 04:30:00 FALSE 
##73 2015-10-10 04:15:00 FALSE 
##74 2015-10-10 05:45:00 FALSE 
##75 2015-10-10 05:30:00 FALSE 
##76 2015-10-10 05:15:00 FALSE 
##77 2015-10-10 05:00:00 FALSE 
##78 2015-10-10 06:45:00 FALSE 
##79 2015-10-10 06:30:00 FALSE 
##80 2015-10-10 06:15:00 FALSE 
##81 2015-10-10 06:00:00 FALSE 
##82 2015-10-10 07:45:00 FALSE 
##83 2015-10-10 07:30:00 FALSE 
##84 2015-10-10 07:15:00 FALSE 
##85 2015-10-10 08:45:00 FALSE 
##86 2015-10-10 08:30:00 FALSE 
##87 2015-10-10 08:15:00 FALSE 
##88 2015-10-10 08:00:00 TRUE 
##89 2015-10-10 09:45:00 FALSE 
##90 2015-10-10 09:30:00 FALSE 
##91 2015-10-10 09:15:00 FALSE 
##92 2015-10-10 09:00:00 FALSE 
##93 2015-10-01 10:45:00 FALSE 
##94 2015-10-01 01:45:00 FALSE 
##95 2015-10-01 10:30:00 FALSE 
##96 2015-10-01 01:30:00 FALSE 
##97 2015-10-01 10:15:00 FALSE 
##98 2015-10-01 01:15:00 FALSE 
##99 2015-10-01 10:00:00 FALSE 
##100 2015-10-11 10:45:00 FALSE