通过ContactID和每行汇总下一个180天的SalesAmount

时间:2015-07-29 20:11:39

标签: r data.table

这是我的数据框:

df <- read.table(text='
ContactID    ActivityDate   SalesAmount
abc           1/1/2014       1000
abc           5/1/2014       2000
abc           6/10/2014      3000
abc          12/31/2014      4000
xyz           1/1/2014       1000
xyz          5/1/2014        2000
xyz          6/10/2014       3000
xyz          12/31/2014      4000

                    ', header=T)

在上一篇文章中,我从“Arun”获得了帮助,以获得过去180天的运行总数:

require(data.table)
setDT(df)[, end := as.Date(ActivityDate, format="%m/%d/%Y")
          ][, start := end - 180L]
setkey(df, ContactID, start, end)
olaps = foverlaps(df, df, nomatch=0L, which=TRUE)
olaps = olaps[xid >= yid, .(ans = sum(df$SalesAmount[yid])), by=xid]

df[olaps$xid, last180 := olaps$ans]

我通过以下方式修改了代码以获得接下来180天的总和:

setDT(df)[, start := as.Date(ActivityDate, format="%m/%d/%Y")
           ][, end := start + 180L]
setkey(df, ContactID,  start,end)
olaps = foverlaps(df, df, nomatch=0L, which=TRUE)
olaps = olaps[xid >= yid, .(ans = sum(df$SalesAmount[yid])), by=xid]

df[olaps$xid, next180 := olaps$ans]

但是我得到了与last180完全相同的结果。我究竟做错了什么?对于接下来180天问题的总和,我也对任何其他快速创造性解决方案持开放态度。

1 个答案:

答案 0 :(得分:1)

Arun在评论中提到我应该在我的原始代码next180中使用olaps [xid&lt; = yid,...]而不是olaps [xid&gt; = yid,...]。这解决了问题。归功于解决方案“Arun”的原始提供商。获得接下来180天总和的最终代码是:

<div class="parent">
  <div class="el"></div>
</div>
<div class="bodycontent"></div>

然后

.el

如果你想摆脱'开始'和'结束'