我有一个包含日期的数据框,我在年份的最低和最高日期之间使用了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>)
答案 0 :(得分:3)
我们可以使用findInterval
dt1[, numYear := findInterval(dateConsult, seq(min(dateConsult),
max(dateConsult), "1 year"))]