我有个人储蓄帐户的数据,我观察协议的金额以及开始和结束日期。以下是消费者的储蓄数据:
amount <- c(1004, 1004, 1240, 1039, 1240, 1039, 1039, 1240, 1040, 1040)
opening <- as.Date(c('2012-11-19', '2013-05-20', '2014-06-13', '2015-05-26',
'2015-06-13', '2015-11-26', '2016-05-26', '2016-06-13', '2016-11-26',
'2017-05-26'))
closing <- as.Date(c('2013-05-20', '2013-11-20', '2015-06-13', '2015-11-26',
'2016-06-13', '2016-05-26', '2016-11-26', '2017-06-13', '2017-05-26',
'2017-07-10'))
dt <- data.frame(amount, opening, closing)
amount opening closing
1004 2012-11-19 2013-05-20
1004 2013-05-20 2013-11-20
1240 2014-06-13 2015-06-13
1039 2015-05-26 2015-11-26
1240 2015-06-13 2016-06-13
1039 2015-11-26 2016-05-26
1039 2016-05-26 2016-11-26
1240 2016-06-13 2017-06-13
1040 2016-11-26 2017-05-26
1040 2017-05-26 2017-07-10
我的任务如下:我想确定所有已转入的帐户。换句话说,我想跟踪所有的储蓄金额,并查看消费者是否在同一天关闭并重新开设了帐户(自动更新储蓄帐户)。例如,在2015年5月26日,消费者开设了一个1039美元的帐户,然后在2015年11月26日将其展期,然后在2016年5月26日再次滚动,然后在2016年11月26日(1040美元)和终于在2017-05-26(1040 $)。
我可以用识别这些帐户ifelse(dt$opening %in% dt$closing, 1, 0)
,但这显然是不够的。我不确定如何进行处理以及在这种情况下通常的方法(我想知道复制整个数据集是否是一个好的开始)。
最终目标是找出在结转帐户时是否有人向储蓄额供款或减少了储蓄额。
希望这足够清楚。很感谢任何形式的帮助!
您可以使用closing
自联接标识日期等于opening
另一行具有相同amount
值的日期的行。在下面的输出中,它们将是具有non-missing的行rollover_opening
。要回答您要查询的实际问题,数据将需要包含更多信息。
library(data.table)
setDT(dt)
dt[dt, on = .(amount, closing = opening), rollover_opening := i.opening]
dt
# amount opening closing rollover_opening
# 1: 1004 2012-11-19 2013-05-20 2013-05-20
# 2: 1004 2013-05-20 2013-11-20 <NA>
# 3: 1240 2014-06-13 2015-06-13 2015-06-13
# 4: 1039 2015-05-26 2015-11-26 2015-11-26
# 5: 1240 2015-06-13 2016-06-13 2016-06-13
# 6: 1039 2015-11-26 2016-05-26 2016-05-26
# 7: 1039 2016-05-26 2016-11-26 <NA>
# 8: 1240 2016-06-13 2017-06-13 <NA>
# 9: 1040 2016-11-26 2017-05-26 2017-05-26
# 10: 1040 2017-05-26 2017-07-10 <NA>
另外的选择:
dt[dt, on = .(closing = opening), rollover_amount := i.amount][]
# amount opening closing rollover_amount
# 1: 1004 2012-11-19 2013-05-20 1004
# 2: 1004 2013-05-20 2013-11-20 NA
# 3: 1240 2014-06-13 2015-06-13 1240
# 4: 1039 2015-05-26 2015-11-26 1039
# 5: 1240 2015-06-13 2016-06-13 1240
# 6: 1039 2015-11-26 2016-05-26 1039
# 7: 1039 2016-05-26 2016-11-26 1040
# 8: 1240 2016-06-13 2017-06-13 NA
# 9: 1040 2016-11-26 2017-05-26 1040
# 10: 1040 2017-05-26 2017-07-10 NA
非常感谢@IceCreamToucan,对于这个问题的最新回应,我深表歉意。您能否按组说明如何使用代码?当我尝试使用该
by
选项时,它给出了一个错误(即未找到金额)。我想知道我是否应该将其与一起使用dplyr
。我的组是id
和Currency
(因为我想按货币标识展期)。如果希望确定新列的匹配考虑这些变量,则可以加入其他变量。例如,代替
on = .(amount, closing = opening)
您可以做on = .(amount, closing = opening, id, Currency)
。大!非常感谢您的宝贵时间,@ IceCreamToucan!