我想计算一个ID/行(人员(在一年内的天数。下面是我的数据集示例。(Inschrijfdatum=注册日期,Uitshrijfdatum=注销日期(
Inschrijfdatum Uitschrijfdatum
<date> <date>
1 1996-02-22 2019-01-11
2 2011-10-31 2019-02-25
3 1992-06-15 2019-03-10
4 2001-11-13 2022-01-01
5 2019-02-18 2019-09-07
6 2019-12-30 2022-01-01
# ... with 12 more rows
df <-structure(list(Inschrijfdatum = structure(c(9548, 15278, 8201,
11639, 10029, 15134, 17756, 16526, 17945, 13427, 7348, 16072,
13195, 8231, 12620, 14767, 17893, 18054, 15300, 12006, 15399,
10092), class = "Date"), Uitschrijfdatum = structure(c(17907,
17952, 17965, 17981, 18001, 18079, 18102, 18137, 18146, 18190,
18198, 18199, 18222, 18233, 18240, 18487, 18496, 18542, 18555,
18581, 18670, 18993), class = "Date")), row.names = c(NA, -22L
), class = c("tbl_df", "tbl", "data.frame"))
我想创建一个新的列,其中包括某一年(在本例中为2019年(的总"人员"天数
Inschrijfdatum Uitschrijfdatum persondays
<date> <date>
1 1996-02-22 2019-01-11 11
2 2011-10-31 2019-02-25 56
3 1992-06-15 2019-03-10 69
4 2001-11-13 2022-01-01 365
5 2019-02-18 2019-09-07 200
6 2019-12-30 2022-01-01 1
我尝试过分步骤进行:
- df$persondays<-df$Uitshrijfdatum-as.Date("2019-01-01",格式="%Y-%m-%d"(
- df$人日<-日期("2020-01-01",格式="%Y-%m-%d"(-df$Inschrijfdatum
这当然不太好用。我想创建一个脚本,可以计算以下每种可能性
2019 2020 1=inschrijfdatum, 2= uitschrijfdatum
|--------------------------|
1-------------2 ? (2 - as.date(2019))
1---------------------------------------2 ? maximum of 365 days
1-----------2 ? days between 1 and 2
1---------2 ? (as.date(2020) - 1)
我想不通。任何帮助都将不胜感激!
非常感谢!
也许是这样?
df$start = pmax(df$Inschrijfdatum, as.Date("2019-01-01"))
df$end = pmin(df$Uitschrijfdatum, as.Date("2020-01-01"))
df$persondays = as.numeric(df$end - df$start + 1)
结果
# A tibble: 22 × 5
Inschrijfdatum Uitschrijfdatum start end persondays
<date> <date> <date> <date> <dbl>
1 1996-02-22 2019-01-11 2019-01-01 2019-01-11 11
2 2011-10-31 2019-02-25 2019-01-01 2019-02-25 56
3 1992-06-15 2019-03-10 2019-01-01 2019-03-10 69
4 2001-11-13 2019-03-26 2019-01-01 2019-03-26 85
5 1997-06-17 2019-04-15 2019-01-01 2019-04-15 105
6 2011-06-09 2019-07-02 2019-01-01 2019-07-02 183
7 2018-08-13 2019-07-25 2019-01-01 2019-07-25 206
8 2015-04-01 2019-08-29 2019-01-01 2019-08-29 241
9 2019-02-18 2019-09-07 2019-02-18 2019-09-07 202
10 2006-10-06 2019-10-21 2019-01-01 2019-10-21 294
# … with 12 more rows