如何跟踪最近6个月每个帐户收到的总交易金额?

问题描述

这是我的交易数据。它显示了从from列中的帐户到to列中的帐户的交易,并带有日期和金额信息

data 

id          from    to          date        amount  
<int>       <fctr>  <fctr>      <date>      <dbl>
19521       6644    6934        2005-01-01  700.0
19524       6753    8456        2005-01-01  600.0
19523       9242    9333        2005-01-01  1000.0
…           …       …           …           …
1056317     7819    7454        2010-12-31  60.2
1056318     6164    7497        2010-12-31  107.5
1056319     7533    7492        2010-12-31  164.1

现在我要做的是:我想逐行查看每个交易,对于from列中的每个帐户,我想跟踪过去6笔交易中收到的交易金额进行特定交易时的月份,并希望将此信息另存为新列。(因此此新列将描述交易前最近六个月from列中的帐户收到的总交易金额日期。)

例如:
在第一行数据中,对于帐户6644,如果to6644这两个月的两个日期之间进行了交易,我应该查看"2004-07-05"-"2005-01-01"列直到2005-01-01进行交易的日期6644为止的期间。如果有6644收到的交易,则应将它们汇总,然后将此总和信息作为值添加到新列total_trx_amount_received_in_last_6month中。同样,我应该对帐户6753执行相同的操作 并查找在日期"2004-07-05"-"2005-01-01"之间获得的交易,并将其加总并加到total_trx_amount_received_in_last_6month列中。 而且,我应该以这种方式在数据中逐行继续。

那么,如何才能实现整个数据呢?

PS:在日期间隔"2004-07-05"-"2005-01-01"中,"2005-01-01"是交易日期,要获取第二个日期"2004-07-05",我将从交易日期{减去180天(约6个月) {1}}。

为了更好地查看,我提供了以下数据:
我还将显示输出结果。假设我们只有这么多交易。只需在这里考虑"2005-01-01"帐户,因为其他帐户5370在这里没有任何交易。

8605,6390,8934

这是我所做的: 首先请注意,上面的这些小数据按id from to date amount total_trx_amount_received_in_last_6month <int> <fctr> <fctr> <date> <dbl> <dbl> 18529 5370 9356 2005-05-31 24.4 0.0 13742 5370 5605 2005-08-05 7618.0 0.0 9913 5370 8567 2005-09-12 21971.0 0.0 956 8605 5370 2005-10-05 5245.0 0.0 2557 5370 5636 2005-11-12 2921.0 5245.0 1602 6390 5370 2005-11-26 8000.0 0.0 18669 5370 8933 2005-11-30 169.2 (5245.0+8000.0)=13245 35900 5370 8483 2006-01-31 71.5 (5245.0+8000.0)=13245 48667 8934 5370 2006-03-31 14.6 0.0 51341 5370 7626 2006-04-11 4214.0 (8000.0+14.6)=8014.6 的升序排序。
在第一行中,对于date中的帐户5370,我查看了过去的数据以查看from column在日期5370之间是否有任何交易。由于第一行是第一笔交易,显然"2004-12-02"-"2005-05-31"在日期5370之前没有收到任何交易,因此我分别将"2005-05-31"登录0.0列中。在第二行中,对于total_trx_amount_received_in_last_6month中的帐户5370from column在日期5370之间没有收到任何交易,因此我将"2005-02-06"-"2005-08-05"登录到{ {1}}列。同样,我分别在第三行和第四行中分别为帐户0.0total_trx_amount_received_in_last_6month登录0.0。在第五行中,对于5370中的帐户86055370在日期from column之间收到了一笔交易,该交易在5370(在数据的第4行)的数量"2005-05-16"-"2005-11-12",因此我将"2005-10-05"登录5245.0列中。在第六行中,对于5245.0中的帐户total_trx_amount_received_in_last_6month6390在日期from column之间没有收到任何交易,因此我将6390登录到{{ 1}}列。数据的所有行都是这样。

dput()数据输出

"2005-05-30"-"2005-11-26"

(我将0.0total_trx_amount_received_in_last_6month列转换为字符,因为它们具有大量的级别,否则输出将占用太多空间)

解决方法

我们可以使用map2_dbl并取6个月范围内的sum中的amount

library(dplyr)
library(purrr)

data %>% 
    mutate(amt = map2_dbl(from,date,~sum(amount[to == .x & between(date,.y - 180,.y)])))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...