使用聚合迭代data.table

时间:2013-02-20 12:33:45

标签: r data.table

我的data.table就像:

AccountNo    SubscriptionStart     SubscriptionEnd
11111        2010-10-12            2011-10-11
11112        2009-03-08            2010-03-08
11112        2010-03-08            2011-03-08
11112        2012-03-08            2013-03-08
11113        2011-08-21            2012-08-21

我想要实现的是添加一个新列,标记稍后续订的帐户。

换句话说:如果在AccountNo定义的子集内的SubscriptionEnd< = max(SubscritionStart),则GotRenewed为TRUE。在这个例子中,它将是:

AccountNo    SubscriptionStart     SubscriptionEnd    GotRenewed
11111        2010-10-12            2011-10-11         0
11112        2009-03-08            2010-03-07         1
11112        2010-03-08            2011-03-07         1
11112        2012-03-08            2013-03-07         0
11113        2011-08-21            2012-08-21         0

我怎么能实现这个目标?感谢您的帮助!

感谢。

1 个答案:

答案 0 :(得分:2)

dt[,GotRenewed := SubscriptionEnd <= max(SubscriptionStart), by=AccountNo]

   AccountNo SubscriptionStart SubscriptionEnd GotRenewed
1:     11111        2010-10-12      2011-10-11      FALSE
2:     11112        2009-03-08      2010-03-08       TRUE
3:     11112        2010-03-08      2011-03-08       TRUE
4:     11112        2012-03-08      2013-03-08      FALSE
5:     11113        2011-08-21      2012-08-21      FALSE

如果你真的需要0/1,请使用as.numeric