我试图通过某个ID(称为PERMNO)来计算股票回报的滚动均值(最近20个周期)。首先,我只是试图创造滚动的意思。我使用这段代码进行了研究:
CRSP_dt[, rolltest1 := rollmeanr(Return, 20, na.rm = TRUE, fill = NA)]
哪个不起作用。但是,当我尝试使用此代码时:
CRSP_dt[, rolltest2 := rollapplyr(Return, 20, mean, na.rm = TRUE, fill = NA)]
它确实有效,所以我不完全确定,为什么?
其次,我试图通过PERMNO计算滚动平均值,所以我添加了" by"此外:
CRSP_dt[, rolltest2 := rollapplyr(Return, 10, mean, na.rm = TRUE, fill = NA),
by = PERMNO]
现在,它在[.data.table
中返回错误"错误(CRSP_dt ,, :=
(rolltest2,rollapplyr(返回,:
RHS的类型('逻辑')必须与LHS匹配(' double')。对于最快的情况,检查和强制会对性能产生太大影响。要么改变目标列的类型,要么强制RHS:=你自己(例如通过使用1L而不是1)"。
从那时起,我一直在尝试将目标列转换为" Double"同样,使用this overstack solution中的解决方案,导致:
CRSP_dt[, rolltest2:= as.numeric(rolltest2)][, rolltest2 := rollapplyr(Return, 10, mean, na.rm = TRUE, fill = NA),
by = PERMNO]
不幸的是,它仍然提供相同的错误代码,所以我不确定,如何从这里开始。