2017-03-06 11 views
0

2 개월 동안 데이터가 있습니다. 날짜 형식은 mm/dd/yyyy입니다. 우리는 등 우리의 데이터 세트, 즉 기간 1,주기 2,날짜를 기간으로 집계하십시오.

출력 예 4 추가 더미 열을 추가하고 싶습니다 이런 식으로

Period1: 06/01/15 - 06/15/15 
Period2: 06/16/15 - 06/30/15 
Period3: 07/01/15 - 07/15/15 
Period4: 07/16/15 - 07/31/15 

: 우리는 4 개 (각 이주의) 기간을 갖고 싶어 : enter image description here

답변

0

문자열을 날짜 형식으로 변환해야합니다. 나는 POSIXct을 사용합니다. 그런 다음 cut을 사용하여 날짜를 그룹으로 나눌 수 있습니다. 그룹에서 더미 변수를 만들려면 model.matrix을 사용할 수 있습니다. 결과를 더 잘 보여주기 위해 몇 가지 테스트 날짜를 추가했습니다. "strptime (날짜 - strptime에

Breaks = as.POSIXct(c("06/01/15", "06/16/15", "07/01/15", 
    "07/16/15", "08/01/15"), format="%m/%d/%y") 

TestData = c("06/15/15", "06/13/15", "06/20/15", "07/17/15") 
Periods = cut(as.POSIXct(TestData, format="%m/%d/%y"), breaks=Breaks) 
as.numeric(Periods) 
[1] 1 1 2 4 

Dummies = model.matrix(~ Periods - 1) 
    Periods2015-06-01 Periods2015-06-16 Periods2015-07-01 Periods2015-07-16 
1     1     0     0     0 
2     1     0     0     0 
3     0     1     0     0 
4     0     0     0     1 

Result = data.frame(TestData, Dummies) 
names(Result) = c("Date", "Period1", "Period2", "Period3", "Period4") 
Result 
     Date Period1 Period2 Period3 Period4 
1 06/15/15  1  0  0  0 
2 06/13/15  1  0  0  0 
3 06/20/15  0  1  0  0 
4 07/17/15  0  0  0  1 
+0

, 도와 주셔서 감사합니다! – olive

0

보면 .. 시작이 Split time-series weekly in R을 확인, 도움이 될한다) (

Z <를 숫자로 월/일/년 날짜를 변환 한 후 분할 %의 m/% d 개/% y를 ")

0

또 다른 가능성은 lubridate을 사용하는 것입니다 : 그것은 완벽하게 작동

library(lubridate) 

Period1 <- interval(start = mdy("06/01/15"), end = mdy("06/15/15")) 
Period2 <- interval(start = mdy("06/16/15"), end = mdy("06/30/15")) 
Period3 <- interval(start = mdy("07/01/15"), end = mdy("07/15/15")) 
Period4 <- interval(start = mdy("07/16/15"), end = mdy("07/31/15")) 

Period <- list(Period1, Period2, Period3, Period4) 

TestData <- mdy(c("06/15/15", "06/13/15", "06/20/15", "07/17/15")) 

sapply(1:length(TestData), function(x){ 
    as.numeric(TestData %within% Period[[x]]) 
})