我的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
我怎么能实现这个目标?感谢您的帮助!
感谢。
答案 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
。