我有一个包含许多ID的数据框,每个ID都有两个不同的列:一个定义一个重要的截止日期,另一个定义许多不同的日期。我需要在截止日期前一个月添加一个列为“-1”的列,在截止日期前两个月为“-2”,截止日期前三个月为“-3”,并且截止日期后一个月为“1”,截止日期后两个月为“2”,依此类推,截至截止日期后6个月。
我的问题是,每个ID的所有截止日期都不同,我只知道如何使用ifelse()
函数命名特定的日期范围。
这里有一小部分数据框可以更好地理解结构:
DF:
i.d. registered_at Day
x 2013-12-20 2013-11-19
x 2013-12-20 2014-02-20
x 2013-12-20 2014-05-11
y 2013-10-01 2013-08-05
y 2013-10-01 2013-10-01
z 2014-01-15 2013-10-25
所以对于i.d. x例如:月“-1”定义为2013-11-20< =“ - 1”< 2013-12-20;月“-2”定义为2013-10-20< =“ - 2”< 2013-11-20;月“-3”定义为2013-09-20< =“-3”< 2013-10-20;月“1”被定义为2013-12-20< =“1”< 2014-01-20等等,直到几个月“6”
我的问题是我不能通过给出具体日期来定义这些标签。例如,“x”将在不同日期的不同月份中定义“-1”个月,因为该日期的登记与i.d完全不同。 “Y”。
我已尝试ifelse()
功能,但无法弄清楚这一点。
我的最终数据框应如下所示:
Newdf:
i.d. registered_at Day MonthsNo
x 2013-12-20 2013-11-19 -2
x 2013-12-20 2014-02-20 3
x 2013-12-20 2014-05-11 5
y 2013-10-01 2013-08-05 -2
y 2013-10-01 2013-10-01 1
z 2014-01-15 2013-10-25 -3
需要考虑的另一个问题是,如果一个i.d.在2013-03-31注册,没有2013-02-31 ..只有2013-02-28,如何确保代码包含这样的情况?
我希望有人可以帮我解决这个问题:)