plyr用于计算相对聚集

plyr用于计算相对聚集,r,dataframe,plyr,R,Dataframe,Plyr,我有一个data.frame,看起来像这样: > head(activity_data) ev_id cust_id active previous_active start_date 1 1141880 201 1 0 2008-08-17 2 4927803 201 1 0 2013-03-17 3 1141880 244 1 0 2008-08-1

我有一个data.frame,看起来像这样:

> head(activity_data)
ev_id cust_id active previous_active start_date
1 1141880     201      1               0 2008-08-17
2 4927803     201      1               0 2013-03-17
3 1141880     244      1               0 2008-08-17
4 2391524     244      1               0 2011-02-05
5 1141868     325      1               0 2008-08-16
6 1141872     325      1               0 2008-08-16
  • 对于每个客户id

    • 对于每个EVU id

      • 创建一个新变量$recent\u active(=sum$active跨所有具有此客户id的行,其中$start\u date>[此行]$start\u date-10)
我正努力使用ddply来实现这一点,就像我的分割分组一样。(cust_id),我想返回具有cust_id和ev_id的行

这是我试过的

ddply(activity_data, .(cust_id), function(x) recent_active=sum(x[this_row,]$active))
如果ddply不是一个选项,您会推荐其他有效的方法。我的数据集有大约200mn行,每行大约需要执行10-15次


示例数据是

您实际上需要在这里使用两步方法(并且在使用以下代码之前还需要将日期转换为日期格式)


我重新整理并使用
数据。表
,你能给我们一个可复制的例子,这样我们就可以在实际数据上写下答案吗?在
$start\u date>[此行]$start\u date-10)
这10是什么?10天、10个月还是10年?请
dput
sample data.dput查看子集。结构(ev_id=c(1144095L,4930018L,1144095L,239373L,1144083L,1144087L,1144099L,1144101L,1190816L,1190818L),客户id=c(201L,201L,244L,244L,325L,325L,325L,325L,325L,325L,325L),活动=c(1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L),上一个活动=c(201L,0,0,0,0,0,0,0),结构=c(结构)(14334、16007、14334、15236、14333、14333、14333、14343、14341)、class=“Date”)、.Names=c(“ev_id”、“cust_id”、“active”、“previous_active”、“start_Date”)、row.Names=c(NA,10L)、class=“data.frame”)
ddply(activity_date, .(cust_id), transform, recent_active=your function) #Not clear what you are asking regarding the function

ddply(activity_date, .(cust_id,ev_id), summarize,recent_active=sum(recent_active))