0
ID  Year  Firm Score

1   2005    A   2
1   2006    A   5
1   2006    B   1
1   2007    A   36
1   2007    E   69
1   2008    E   8
1   2008    B   54
1   2009    A   25
1   2009    C   2
1   2010    E   2
1   2010    B   2
1   2011    A   5
1   2011    B   5
1   2012    A   4
1   2012    B   1

数据

在上面的数据中,我想对每个人 (ID) 的“分数”进行 5 年滚动总和,条件是该人所在的当年公司。让我通过例子来解释一下。假设我想要 2009 年的“分数”变量的滚动总和,它应该首先检查该人 (ID) 工作的公司。在 2009 年,该人在 A 和 C 工作。然后它应该只计算公司 A 或 C 的“分数”的 5 年滚动总和。2009 年的 5 年滚动总和的输出将是(2(2005 年公司 A) + 5 ((2006 年 A 公司)) + 36 (2007 年 A 公司) + 27 (2009 年 A 和 C 公司) = 70。[注:2008 年被忽略,因为该人没有在 A 公司注册也不坚定 C]

我还想在类似的行上执行滚动平均。[注:原始数据有大约 3000 万个观测值]

4

1 回答 1

1

设置数据框

rs <- as.data.frame(matrix(nrow =15, ncol = 4))

colnames(rs) <- c("ID", "Year", "Firm", "Score")

rs$ID <- 1
rs$Year <- c(2005,
             2006,
             2006,
             2007,
             2007,
             2008,
             2008,
             2009,
             2009,
             2010,
             2010,
             2011,
             2011,
             2012,
             2012)

rs$Firm <- c("A", "A", "B", "A", "E",
             "E", "B", "A", "C", "E", 
             "B", "A", "B", "A", "B")

rs$Score <- c(2, 5, 1, 36, 69, 8, 
              54, 25, 2, 2, 2, 5, 5, 4,
              1)

循环独特的年份

a <- rs$Year

for(i in unique(a)){

  b <- rs[rs$Year == i,]
  c <- (b$Firm)
  d <-  rs[rs$Year <=  i & rs$Firm %in% c,]
  print(paste(i, sum(d$Score)))

}

输出:

[1] "2005 2"
[1] "2006 8"
[1] "2007 112"
[1] "2008 132"
[1] "2009 70"
[1] "2010 136"
[1] "2011 135"
[1] "2012 140"
于 2017-07-07T22:13:01.713 回答