2017-07-07 22 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 –