我正在尝试向 data.table 添加一列,其中 data.table 的该列通过将每组值的累积(滞后 1)向量以及组级属性传递给函数来填充,并且然后返回适当的值。
我有 800 万行,每个代理日一个。我的函数比 myfun 更复杂,但关键是它从 agent-day 表中获取两个参数:一个向量 (Vector),其中包含特定代理在特定日期之前所有天的值,以及一个代理向量每个代理都相同的级别属性 (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)]
非常感谢您的帮助。