我有大约以下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
方法进行计算。有什么建议?
谢谢你的关注
答案 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)]