У меня есть 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
Я recoomand с помощью 'data.table ', можете ли вы дать нам воспроизводимый пример, чтобы мы могли написать ответ на фактические данные? – statquant
В '$ start_date> [this_row] $ start_date - 10)' что такое 10? 10 дней или 10 месяцев или 10 лет? и, пожалуйста, 'dput' образцы данных. – Metrics
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