Все, что я хочу сделать, - это просто среднее значение if (точно так же, как среднее значение команды, если в excel). Я работаю с data.tables для эффективности, так как у меня довольно большие таблицы (~ 1 м строк).
Моя цель - найти
Table 1
| individual id | date |
-------------------------------
| 1 | 2018-01-02 |
| 1 | 2018-01-03 |
| 2 | 2018-01-02 |
| 2 | 2018-01-03 |
Table 2
| individual id | date2 | alpha |
---------------------------------------
| 1 | 2018-01-02 | 1 |
| 1 | 2018-01-04 | 1.5 |
| 1 | 2018-01-05 | 1 |
| 2 | 2018-01-01 | 2 |
| 2 | 2018-01-02 | 1 |
| 2 | 2018-01-05 | 4 |
Целевой результат
Updated table 1
| individual id | date | mean(alpha) |
---------------------------------------------
| 1 | 2018-01-02 | 1 |
| 1 | 2018-01-03 | 1 |
| 2 | 2018-01-02 | 1.5 |
| 2 | 2018-01-03 | 1.5 |
Это просто среднее значение всех значений для этого человека в таблице2, которые произошли (дата2) до (и включая) дату.
Результат может быть получен с помощью следующей команды mysql, но я не могу воспроизвести его в R.
update table1
set daily_alpha_avg =
(select avg(case when date2<date then alpha else 0 end)
from table2
where table2.individual_id= table1.individual_id
group by individual_id);
Мое лучшее предположение на данный момент:
table1[table2, on = .(individual_id, date>=date2),
.(x.individual_id, x.date, bb = mean(alpha)), by= .(x.date, x.individual_id)]
или
table1[, daily_alpha_avg := table2[table1, mean(alpha), on =.(individual_id, date>=date2)]]
но это не работает, я знаю, что это неправильно, я просто не знаю, как это исправить.
Спасибо за любую помощь