2013-08-22 2 views
0

У меня есть data.frame, который выглядит следующим образом:plyr вычислить относительную aggregration

> 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 
  • для каждого CUST_ID

    • для каждого EV_ID

      • создать новая переменная $ recent_active (= sum $ активна во всех строках с этим cust_id, где $ s tart_date> [this_row] $ start_date - 10)

Я изо всех сил, чтобы сделать это с помощью ddply, так как мой раскол группировка (cust_id), и я хотел вернуться строк с Cust_ID и EV_ID.

Вот что я пытался

ddply(activity_data, .(cust_id), function(x) recent_active=sum(x[this_row,]$active)) 

Если ddply не вариант, что другие способы effieicent вы рекомендуете. У моего набора данных ~ 200 млн строк, и мне нужно сделать это примерно 10-15 раз в строке.

выборки данных here

+2

Я recoomand с помощью 'data.table ', можете ли вы дать нам воспроизводимый пример, чтобы мы могли написать ответ на фактические данные? – statquant

+1

В '$ start_date> [this_row] $ start_date - 10)' что такое 10? 10 дней или 10 месяцев или 10 лет? и, пожалуйста, 'dput' образцы данных. – Metrics

+0

dput для подмножества. структура (список (ev_id = c (1144095L, 4930018L, 1144095L, 2393739L, 1144083L, 1144087L, 1144099L, 1144101L, 1190816L, 1190818L), cust_id = c (201L, 201L, 244L, 244L, 325L, 325L, 325L, 325L , 325L, 325L), active = c (1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), previous_active = c (0, 0, 0, 0, 0, 0, 0 , 0, 0, 0), start_date = структура (c (14334, 16007, 14334, 15236, 14333, 14333, 14333, 14333, 14340, 14341 ), class = "Date")), .Names = c («ev_id», «cust_id», «active», «previous_active», «start_date»), row.names = c (NA, 10L), class = "data.frame") – eamo

ответ

0

Вы на самом деле нужно использовать два шага подхода здесь (а также необходимо преобразовать дату в формате даты, прежде чем использовать следующий код)

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)) 
Смежные вопросы