我有以下data.table:
Dates variable value
1: 1985/01/02 SLB UN Equity 4.5192
2: 1985/01/03 SLB UN Equity 4.3111
3: 1985/01/04 SLB UN Equity 4.2963
4: 1985/01/07 SLB UN Equity 4.2368
5: 1985/01/08 SLB UN Equity 4.1327
---
我想执行“ n”个“移位”到值列,然后通过将值列除以每个“移位”列来计算收益。我已经使用
管理了第一部分dt[, paste("px.min.", 1:2, sep = "", "d") := shift(value, 1:2), by = variable][]
结果为:
Dates variable value px.min.1d px.min.2d
1: 1985/01/02 SLB UN Equity 4.5192 NA NA
2: 1985/01/03 SLB UN Equity 4.3111 4.5192 NA
3: 1985/01/04 SLB UN Equity 4.2963 4.3111 4.5192
4: 1985/01/07 SLB UN Equity 4.2368 4.2963 4.3111
5: 1985/01/08 SLB UN Equity 4.1327 4.2368 4.2963
---
第二部分引起了问题。
dt.px.melt[, paste("px.min.", 1:2, sep = "", "d") := value/shift(value, 1:2), by = variable][ ]
产生错误:
“ value / shift(value,1:2)中的错误:二进制运算符的非数字参数”
答案 0 :(得分:0)
您可以使用
dt[, paste("px.min.", 1:2, sep = "", "d") :=
lapply(shift(value, 1:2), function(x) value/x), by = variable][ ]
关键是您需要逐行进行除法运算,lapply
将为您完成