"shift"-函数与计算相结合
Combining "shift"-function with calculation
我有以下 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"-数量 "shifts",然后通过将值列除以每个 "shifted" 列来计算 return .我使用以下方法管理了第一部分:
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][ ]
产生错误:
"Error in value/shift(value, 1:2) : non-numeric argument to binary operator"
您可以使用
dt[, paste("px.min.", 1:2, sep = "", "d") :=
lapply(shift(value, 1:2), function(x) value/x), by = variable][ ]
重点是你需要逐列进行除法运算,lapply
会帮你完成
我有以下 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"-数量 "shifts",然后通过将值列除以每个 "shifted" 列来计算 return .我使用以下方法管理了第一部分:
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][ ]
产生错误:
"Error in value/shift(value, 1:2) : non-numeric argument to binary operator"
您可以使用
dt[, paste("px.min.", 1:2, sep = "", "d") :=
lapply(shift(value, 1:2), function(x) value/x), by = variable][ ]
重点是你需要逐列进行除法运算,lapply
会帮你完成