简单回报估计的Data.table方法

时间:2014-05-12 11:28:45

标签: r data.table

我有大约以下df

a  <- seq(1, 1010, 1)
b  <- seq(2,1011,1)
c  <- c(rep(1,253), rep(2, 252), rep(3,254), rep(4,251))
d  <- c(rep(5,253), rep(6, 252), rep(7,254), rep(8,251))
df <- data.frame(a,b,c,d)

首先,我按照c和d列对日期进行分组。现在我想计算简单的回报。我应用以下代码:

 df1<-dlply( df, .(c,d) , transform, simplereturn=c(NA,df[2:length(a),"a"]/df[1:(length(a)-1),"a"]) )
 df<-do.call("rbind", df1)

它似乎无法正常工作,而且,我想使用data.table方法进行计算。有什么建议? 谢谢你的关注

1 个答案:

答案 0 :(得分:1)

以下是我认为正确的plyr解决方案:

df <- ddply( df, .(c,d) , transform, simplereturn=c(NA, a[-1] / head(a, -1)))

这里是等效的data.table代码:

library(data.table)
setDT(df)
df[, simplereturn := c(NA, a[-1] / head(a, -1)), by=list(c, d)]