总结过去几年中所有观察结果的最有效方法是什么

时间:2019-01-23 12:43:27

标签: r loops dplyr plyr

我具有与以下相似的数据集

对于每个唯一年份,我想对所有条约汇总数据集中每个唯一ID。解决此类问题的最佳方法是什么?我的数据集比这里的示例大得多。我听说for loops的执行效率很低。

id <- rep(1:3, 4)
year <- (c(c(rep(1990, 3)), c(rep(1991, 3)), c(rep(1992, 3)), c(rep(1993, 3))) )
treaty <- c(1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1 )
data <- cbind(id, year, treaty)

我尝试过的事情是这样的,但是我没有设法使它起作用。我也可以使用plyrdplyr软件包来做到这一点吗?

for (i in unique(data$year)){
for (j in unique(data$year)){
  prior_temp <- sum(dat$treaty[which(dat$id==j & yearunique[1:i])])
 }
   dat$prior <- prior_temp
}

1 个答案:

答案 0 :(得分:1)

如果按先前的意思是该id的当前和以前年份,则:

transform(data, prior = ave(treaty, id, FUN = cumsum))

或者如果您真的是指id的前几年,那么:

transform(data, prior = ave(treaty, id, FUN = cumsum) - treaty)

使用dplyr可能是这个,或者如果您真的想先验,请用cumsum(treaty)替换cumsum(treaty) - treaty

library(dplyr)

data %>%
  as.data.frame %>%
  group_by(id) %>%
  mutate(prior = cumsum(treaty)) %>%
  ungroup