【问题标题】:Combining "shift"-function with calculation将“移位”功能与计算相结合
【发布时间】:2023-03-17 05:20:02
【问题描述】:

我有以下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][ ]

产生错误:

“值/移位错误(值,1:2):二元运算符的非数字参数”

【问题讨论】:

  • 如果您在dput 中包含一些虚拟数据,解决您的问题会更容易。
  • 我认为dt.px.melt 应该只是dt
  • 更正我的歉意。

标签: r data.table shift


【解决方案1】:

你可以使用

dt[, paste("px.min.", 1:2, sep = "", "d") := 
       lapply(shift(value, 1:2), function(x) value/x), by = variable][ ]

重点是你需要逐列进行除法运算,lapply会帮你做

【讨论】:

  • 非常感谢您。除了计算的值列之外,是否可以保留“移位”的值列?
猜你喜欢
  • 2012-12-31
  • 1970-01-01
  • 2020-07-06
  • 2017-03-16
  • 2021-03-31
  • 2016-02-29
  • 1970-01-01
  • 2020-09-09
  • 2019-11-17
相关资源
最近更新 更多