2016-10-12 2 views
1

내가 다음과 같습니다 데이터 프레임을 가지고 범위 위의 시작 날짜와 종료 날짜 사이의 범위를 갖는 "날짜"라는 열 따라서, 데이터 프레임 위에 다른 데이터 프레임을 얻을 것이다 :는 날짜를 기준으로 여러 행을 만들 수는

Name StartDate EndDate Date 
A 12/12/2012 12/15/2012 12/12/2012 
A 12/12/2012 12/15/2012 12/13/2012 
A 12/12/2012 12/15/2012 12/14/2012 
A 12/12/2012 12/15/2012 12/15/2012 
B 11/11/2012 11/14/2012 11/11/2012 
B 11/11/2012 11/14/2012 11/12/2012 
B 11/11/2012 11/14/2012 11/13/2012 
B 11/11/2012 11/14/2012 11/14/2012 

내가 필요한 날짜의 목록을 만들 수 있습니다 seq.Date() 기능을 발견,하지만 난에 대한를 사용하지 않고 각 행이 적용하는 방법을 잘 모르겠어요 고리.

답변

2

data.table 패키지를 사용하여 당신이 할 수 있습니다 :

library(data.table) 
setDT(df)[, c('StartDate', 'EndDate') := lapply(.SD, as.Date, format = '%m/%d/%Y'), .SDcols = 2:3 
      ][, .(date = seq(StartDate, EndDate, 'day')), by = .(Name, StartDate, EndDate)] 

주는 :

Name StartDate EndDate  date 
1: A 2012-12-12 2012-12-15 2012-12-12 
2: A 2012-12-12 2012-12-15 2012-12-13 
3: A 2012-12-12 2012-12-15 2012-12-14 
4: A 2012-12-12 2012-12-15 2012-12-15 
5: B 2012-11-11 2012-11-14 2012-11-11 
6: B 2012-11-11 2012-11-14 2012-11-12 
7: B 2012-11-11 2012-11-14 2012-11-13 
8: B 2012-11-11 2012-11-14 2012-11-14 

설명 :

  • 코드의 첫 번째 줄은 날짜 -에 날짜 열을 변환 체재.
  • 모든 열()을 기준으로 그룹화하고 seq(StartDate,EndDate,'day')으로 시퀀스를 만듭니다.
관련 문제