我具有与以下相似的数据集
对于每个唯一年份,我想对所有条约汇总数据集中每个唯一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)
我尝试过的事情是这样的,但是我没有设法使它起作用。我也可以使用plyr
或dplyr
软件包来做到这一点吗?
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
}
答案 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