没有for循环的seq的间隔数

时间:2017-04-03 13:24:04

标签: r date 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

seq()的结果:

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

我想创建一个新列,其中值由seq()的间隔定义而不用于循环(由于我有超过120 000行,因此需要花费很多时间)。

所以: 在"2002-11-17""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>)

1 个答案:

答案 0 :(得分:3)

我们可以使用findInterval

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