Надеюсь, название достаточно ясное.
У меня есть таблица, выглядящая так:
classes id value
a 1 10
a 2 15
a 3 12
b 1 5
b 2 9
b 3 7
c 1 6
c 2 14
c 3 6
а вот что хотелось бы:
classes id value cumsum
a 1 10 10
a 2 15 25
a 3 12 37
b 1 5 5
b 2 9 14
b 3 7 21
c 1 6 6
c 2 14 20
c 3 6 26
Я видел это решение и уже успешно применил его к случаям, когда у меня нет нескольких классов:
id value cumsum
1 10 10
2 15 25
3 12 37
Это было достаточно быстро, даже с наборами данных, размер которых эквивалентен тому, над которым я сейчас работаю.
Однако, когда я пытаюсь применить тот же самый код к набору данных, над которым я сейчас работаю (который выглядит как первая таблица этого вопроса, несколько классов IE), без подстановки его на a
, b
, c
, мне кажется что это занимает много времени (он работает уже 4 часа. Набор данных составляет 40 000 строк).
Есть идеи, есть ли проблема с кодом из связанного ответа при использовании в этом контексте? У меня проблемы с треугольным соединением, но я чувствую, что может быть проблема с размером соединения когда количество строк увеличивается, что сильно замедляет все это, что, возможно, даже усугубляется тем фактом, что существует несколько «классов», по которым можно выполнять кумулятивные суммы.
Есть ли способ сделать это быстрее? Я использую SQL
в R
через пакет SQLDF
. Подойдет решение либо в коде R (с внешним общим пакетом или без него), либо в коде SQL.
Спасибо
with(df, ave(value, classes, FUN = cumsum))
- person talat   schedule 11.02.2016