我有一个包含年份,国家/地区代码和一段数据的数据集。我想创建一个新专栏,总结每年国家案例之前十年的数据,因此,例如,1985年在英国,我得到了1975 - 1984年英国所有数据的总和。
我最终使用for循环:
for (i in 1:length(pol4$change)) {
pol4$change10[i]<-sum(pol4$change[pol4$ccode==pol4$ccode[i] &
pol4$year %in% pol4$year[i]-(1:10)])
}
但我不禁觉得有一种更优雅的方式。有什么想法吗?
更新 这是一个示例数据集:
set.seed(24)
pol4<-data.frame(ccode=rep(1:10,each=100),year=rep(1900:1999,times=10),
change=sample(1:10,replace=TRUE))
答案 0 :(得分:4)
library(dplyr)
library(RcppRoll)
pol4 %>%
group_by(ccode) %>%
mutate(change10 = roll_sum(change, 11, fill=NA, align ="right")-change) %>%
head(15)
ccode year change change10
1 1 1900 3 NA
2 1 1901 3 NA
3 1 1902 8 NA
4 1 1903 6 NA
5 1 1904 7 NA
6 1 1905 10 NA
7 1 1906 3 NA
8 1 1907 8 NA
9 1 1908 9 NA
10 1 1909 3 NA
11 1 1910 3 60
12 1 1911 3 60
13 1 1912 8 60
14 1 1913 6 60
15 1 1914 7 60