2017-04-03 1 views
1

날짜가있는 데이터 프레임이 있고 가장 낮은 날짜와 가장 높은 날짜 사이에 seq()을 사용했습니다.for 루프가없는 seq의 간격 수

Dataframe : seq()

 daysOfStop dateConsult 
1:   NA 2002-11-17 
2:   NA 2003-11-03 
3:   NA 2004-12-16 
4:   NA 2006-01-31 
5:   NA 2006-01-31 
6:   NA 2003-02-05 
7:   NA 2003-09-29 
8:   NA 2005-08-01 
9:   NA 2005-08-01 
10:   NA 2005-08-01 

결과 :

"2002-11-17" "2003-11-17" "2004-11-17" "2005-11-17" 

나는 값이 루프에 대한없이 seq()의 간격에 의해 정의 된 새 열을 만들기 위해 그것을하고 싶은 무엇 (그게 120,000 개 이상의 행을 가지고 있기 때문에 많은 시간이 걸립니다).

따라서 : 과 "2003-11-17" 사이에서 연도 번호는 1 (첫 번째 간격)입니다. "2003-11-17""2004-11-17" 사이의 은 연도 번호가 2 (두 번째 간격) 인 입니다. 예상

결과 :

 daysOfStop dateConsult numYear 
1:   NA 2002-11-17 1 
2:   NA 2003-11-03 1 
3:   NA 2004-12-16 3 
4:   NA 2006-01-31 4 
5:   NA 2006-01-31 4 
6:   NA 2003-02-05 1 
7:   NA 2003-09-29 1 
8:   NA 2005-08-01 3 
9:   NA 2005-08-01 3 
10:   NA 2005-08-01 3 

데이터 :

structure(list(daysOfStop = c(NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), 
    dateConsult = structure(c(12008, 12359, 12768, 13179, 13179, 
    12088, 12324, 12996, 12996, 12996), class = "Date")), .Names = c("daysOfStop", 
"dateConsult"), class = c("data.table", "data.frame"), row.names = c(NA, 
-10L), .internal.selfref = <pointer: 0x0000000006360788>) 

답변

3

우리는 내가 찾던 함수의 findInterval

dt1[, numYear := findInterval(dateConsult, seq(min(dateConsult), 
         max(dateConsult), "1 year"))] 
+1

를 사용할 수 있습니다. 아주 세다. 감사 ! –

관련 문제