这是使用dplyr 和cumsum 解决7 天问题的方法
它确实会重新排列 data.frame 作为副作用。
我借用Hack-R supplied for their solution的数据
df1 <- data.frame(
company = rep(c("Ford", "Coca-cola", "Booz Allen Hamilton"),90),
returns = rep(c(200,200,150,250,100,225),45),
day = NA
)
df1$day[order(df1$company)] <- 1:90
df1 <- df1 %>%
group_by(company) %>%
arrange(day) %>%
mutate(c_returns = cumsum(returns)) %>%
ungroup()
df1 <- merge(df1 %>% mutate(day=day+6),
df1,
by=c('company','day'),
suffixes=c('.0','.1'),
all.x=T) %>%
mutate(returns_7day = c_returns.1 - c_returns.0 + returns.0,
returns=returns.0,
day=day-6) %>%
select(-c(returns.0, returns.1, c_returns.0, c_returns.1))