我正在尝试向data.table添加一个列,其中data.table的列通过将每个组的累积(滞后1)值向量以及组级属性传递给a来填充函数,然后返回适当的值。
我有8M行,每个代理日一个。我的函数比myfun更复杂,但关键是它需要来自agent-day表的两个参数:特定代理之前所有日期的特定代理的值的向量(Vector),以及代理向量-level属性(PerAgent),每个代理都是相同的。
library(data.table)
library(dplyr)
library(zoo)
DT <- data.table(Agent=LETTERS[1:3],day=c(1,1,1,2,2,2,3,3,3), PerAgent=c(.2,.4,.6),Vector=1:9,Answer=c(NA,NA,NA,.2,.8,1.8,1,2.8,5.4))
myFun = function(Vector,PerAgent){
PerAgent=PerAgent[1]
Answer=PerAgent*sum(Vector)
return(Answer)
}
我正在尝试生成“答案”栏目(显然不像我在这里那样手动完成)。
我现在所做的不行,因为我试图传递第二个参数是:
DT[,Answer:=lag(rollapplyr(Vector,PerAgent,seq_along(Vector),myFun),1),by=.(Agent)]
如果我不需要将第二个参数传递给(简化)函数,则可以正常工作:
myFun = function(Vector){
Answer=.1*sum(Vector)
return(Answer)
}
DT[,Answer:=lag(rollapplyr(Vector,seq_along(Vector),myFun),1),by=.(Agent)]
非常感谢您的帮助。