Хорошо, вот проблема, которую я бы хотел решить, используя эффективное, элегантное решение, такое как data.table или dplyr.Кумулятивная сумма деления с различными знаменателями R
Определение:
DT = data.table(group=c(rep("A",3),rep("B",5)),value=c(2,9,2,3,4,1,0,3))
time group value
1: 1 A 2
2: 2 A 9
3: 3 A 2
4: 1 B 3
5: 2 B 4
6: 3 B 1
7: 4 B 0
8: 5 B 3
То, что я пытаюсь получить это совокупная сумма по группе значений, деленная на их обратной упорядоченности в момент времени они наблюдались.
time group value RESULT
1: 1 A 2 2.000000
2: 2 A 9 10.000000
3: 3 A 2 7.166667
4: 1 B 3 3.000000
5: 2 B 4 5.500000
6: 3 B 1 4.000000
7: 4 B 0 2.583333
8: 5 B 3 4.933333
В строке 5 результата является: 4/1 + 3/2 = 5.5
Поскольку в момент времени 2, группа В имела 2 наблюдения, последний разделен на 1 и предыдущего на 1. Далее в строке 6 результат: 1/1 + 4/2+ 3/3 = 4
так как во время 3, группа в имела 3 наблюдения, последний разделен на 1, предыдущий на 2 и неподвижного предыдущего на 3. в строке 7, 0/1 + 1/2 + 4/3 + 3/4 = 2.583333
, и так далее ...
данные большие, поэтому избегать циклов очень важно!
'DT [, .SD]' такое же, как 'DT', так что вы просто делаете это, чтобы скобки были хорошо выровнены? – Frank
@Frank Yep Мне больше нравится форматирование и читаемость, чем копия mem. Это только я, хотя –