使用 2 个向量参数翻转函数

标签 r time-series data.table xts

我想对需要 2 个向量参数的函数应用滚动。这是使用 data.table 的示例(不起作用):

library(data.table)
df <- as.data.table(cbind.data.frame(x=1:100, y=101:200))
my_sum <- function(x, y) {
  x <- log(x)
  y <- x * y
  return(x + y)
}
roll_df <- frollapply(df, 10, function(x, y) {
  my_sum(x, y)})

它无法识别 y 列。 Ofc,解决方案可以使用 xts 或其他一些包。

编辑: 这是我想要应用的真正功能:

library(dpseg)
dpseg_roll <- function(time, price) {
  p <- estimateP(x=time, y=price, plot=FALSE)
  segs <- dpseg(time, price, jumps=jumps, P=p, type=type, store.matrix=TRUE)
  slope_last <- segs$segments$slope[length(segs$segments$slope)]
  return(slope_last)
}

最佳答案

runner您可以在滚动窗口中应用任何功能。也可以在插入 x 参数的 data.frame 行上创建运行窗口。让我们关注更简单的函数 my_sum。运行程序中的参数 f 只能接受一个对象(在本例中为 data)。我鼓励在对子集应用一些奇特的模型之前将 browser() 放入函数中进行逐行调试(某些算法需要一些最小数量的观察)。

my_sum <- function(data) {
  # browser()
  x <- log(data$x)
  y <- x * data$y
  tail(x + y, 1) # return only one value
}

my_sum 应该只返回一个值,因为 runner 计算每一行 - 如果 my_sum 返回向量,您将得到一个列表。 因为 runner 是一个独立的函数,所以您需要将 data.table 对象传递给 x。最好的方法是使用 x = .SD (请参阅 here 为什么)

df[, 
   new_col := runner(
      x = .SD,
      f = my_sum,
      k = 10
)]

关于使用 2 个向量参数翻转函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64062969/

相关文章:

r - 保存要在另一个系统上渲染的 ggplot2 图

python - 在 Pandas 中获取平均年份(多年平均天数)

r - 使用具有多个 value.var 的 dcast 时出错

用字符串中的平均值替换范围

r - 取R中两个向量的平均值

r - 在 R 中创建马赛克图

r - 向聚类散点图 (tSNE) 添加文本注释

r - R中每小时分割时间序列数据

mysql - 在结果集中没有日期间隔的日期范围内按日期聚合数据

R:分组条件下聚合大数据帧