我花了数小时试图编写循环遍历唯一ID并从具有相同ID(在本例中为许可证编号)的前一行中提取值的代码。我已经尝试过for loops
和lapply
的多次迭代,但是没有运气。
数据如下:
est_licnum to_licnum Link_dt UnLink_dt
1 120701436 100600478 2012-05-07 2014-10-15
2 120701436 100600301 2012-05-07 2016-04-19
3 120701436 130605459 2012-05-07 2016-05-12
4 120701436 100600654 2012-05-07 2016-05-13
5 120701436 130605459 2012-05-07 2017-06-01
6 120701436 100600273 2012-05-07 <NA>
7 120708499 100600199 2012-08-28 2014-06-20
8 120708499 110600019 2012-08-28 2014-12-09
9 120708499 100600345 2012-08-28 2015-08-10
10 120708499 100600498 2012-08-28 2016-08-09
11 120708499 100600254 2012-08-28 2018-01-05
12 120708499 100600273 2012-08-28 <NA>
13 140700171 100600301 2014-01-29 2014-07-29
14 140700171 130605459 2014-01-29 2016-05-12
15 140700171 100600654 2014-01-29 2016-05-13
16 140700171 130605459 2014-01-29 2017-06-01
17 140700171 100600254 2014-01-29 2017-06-01
18 140700171 100600273 2014-01-29 <NA>
基于est_licnum
,我希望为从to_licnum
和Link_dt
抽取的每个Unlink_dt
创建开始和结束日期。
首先,更简单的部分:如果UnLink_dt
是NA
,则开始日期将是最新的UnLink_dt
,结束日期将被硬编码为2018-07-06
。对于每个est_licnum
,最早的UnLink_dt
的开始日期将等于Link_dt
,结束日期将是UnLink_dt
。如果有点令人费解,那一切都非常简单。
下一步对我来说更加困难。下一个最早的UnLink_dt
的开始日期将等于前一个UnLink_dt
,依此类推...所有使结束日期等于Unlink_dt
。
因此,理想情况下,最终结果是...
est_licnum to_licnum Link_dt UnLink_dt start_dt end_dt
1 120701436 100600478 2012-05-07 2014-10-15 2012-05-07 2014-10-15
2 120701436 100600301 2012-05-07 2016-04-19 2014-10-15 2016-04-19
3 120701436 130605459 2012-05-07 2016-05-12 2016-04-19 2016-05-12
4 120701436 100600654 2012-05-07 2016-05-13 2016-05-12 2016-05-13
5 120701436 130605459 2012-05-07 2017-06-01 2016-05-13 2017-06-01
6 120701436 100600273 2012-05-07 <NA> 2017-06-01 2018-07-06
如您所见,我可以在一个示例中对其进行管理,但是遍历文件是挂断我的地方。任何帮助将不胜感激。 (此外,这全部取决于对文件进行正确排序。再次感谢。)