温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - compare values of a column with multiple values in another column by group in R
r

其他 - 在R中按组比较一列的值与另一列中的多个值

发布于 2020-03-27 11:30:52

我有个人储蓄帐户的数据,我观察协议的金额以及开始和结束日期。以下是消费者的储蓄数据:

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),但这显然是不够的。我不确定如何进行处理以及在这种情况下通常的方法(我想知道复制整个数据集是否是一个好的开始)。

最终目标是找出在结转帐户时是否有人向储蓄额供款或减少了储蓄额。

希望这足够清楚。很感谢任何形式的帮助!

查看更多

查看更多

提问者
Shirkhanyan
被浏览
61
IceCreamToucan 2019-07-03 23:17

您可以使用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

发布
问题

分享
好友

手机
浏览

扫码手机浏览