2017-07-07 72 views
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 

Data条件轧制萨姆(滚动平均)中的R

在上述数据,我要通过5年上本年度公司来进行组滚动“得分”的总和为每个单独的(ID)的条件该人正在工作。 让我通过示例来解释这一点。假设我想要2009年滚动的'Score'变量总和,它应该首先检查人员(ID)所在的公司。 2009年,人员在A和C工作。然后它应该计算5年的“得分”的滚动总和,仅对于公司A或C.对于2009年5年滚动总和的产出将为(2(对于2005年公司A) + 5((2006年公司A)+ 36(2007年公司A)+ 27(2009年公司A和C公司))= 70。[注:2008年被忽略,因为个人未在公司A注册也没有公司C]

我也想在相似的线上执行滚动平均。 [注:原始数据有3000万左右的观察]

+0

图像可以被发现在https://i.stack.imgur.com/CyWL0.png –

+1

退房'zoo :: rollappl y' – Mako212

+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" 
+0

感谢您的答案。我的原始数据有3000万条记录。我想,for循环将是非常昂贵的。可以使用data.table()库来完成这种事情吗? –

+0

此外,对于5年滚动总和,d < - rs [%$年&lt;年&季$固定%年%> = i-5,]。 2012年,滚动总和= 96 –