【发布时间】:2019-04-17 16:20:03
【问题描述】:
我想做的只是一个简单的平均 if(就像 excel 中的命令平均)。我正在使用 data.tables 以提高效率,因为我有相当大的表(约 1m 行)。
我的目标是查找
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)]]
但这不起作用,我知道它错了我只是不知道如何解决它。
感谢您的帮助
【问题讨论】:
-
@sindri_baldur 你是对的,我已经更新了。非常感谢
标签: r data.table rmysql