вот мини-пример, чтобы проиллюстрировать мою задачу. У меня есть большой набор данных, скажем, таблица данных dt, с датой столбцов, exdate (срок выполнения) и ценой X (например, цена доставки в exdate).
date exdate X
1999-01-01 1999-02-01 100
1999-01-01 1999-01-17 50
1999-01-01 1999-05-01 75
1999-01-02 1999-01-17 60
1999-01-02 1999-04-02 50
... ... ...
и так далее. Теперь я хочу выполнить определенный анализ:
- Для каждой даты и каждого эксдата я хочу применить функции ко всем ценам, соответствующим эксдатам больше, чем текущий эксдат. (например, проверьте, выше ли цена:
sapply(dt[date==date[1] & exdate > exdate[1],X],function(x) x>dt[date==date[1] & exdate = exdate[1],X])
- То же, что и 1., но теперь берем те же эксдаты и ищем все товары, соответствующие ценам, превышающим текущую, и снова применяя определенные формулы.
Я пробовал эту нарезку с комбинацией метода data.table, показанного в 1, и вложенных циклов for, повторяющихся по каждому столбцу. Излишне говорить, что это занимает довольно много времени.
Следующей моей идеей было использовать многомерный массив для одновременного выполнения анализа, но я не смог заставить его работать.
Моей последней попыткой было изучение вариантов data.tables .SD и .GRP, но и этот подход не был плодотворным, хотя я думал, что просто что-то здесь упускаю и это может быть вариант.
Я довольно много читал на этом форуме о нарезке и оптимизации, но, учитывая, что формулы, которые я применяю, нетривиальны (например, можно рассмотреть среднее/сумму/среднее), я не смог применить данные решения.
Поэтому, если кто-то имел дело с такой проблемой/задачей раньше или знает об этом, я был бы очень признателен за любую помощь, которую я могу получить!
Спасибо!