R:基于当前行的值对行的子集求和并添加到新列

时间:2015-03-22 02:36:08

标签: r

我有一个包含年份,国家/地区代码和一段数据的数据集。我想创建一个新专栏,总结每年国家案例之前十年的数据,因此,例如,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))

1 个答案:

答案 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