2015-12-23 121 views
2

我有以下問題: 我有一個data.frame有兩個因子變量和一個數值變量。一個因素變量是年份,另一個因素變量是一個類別。對於這兩個類別的每一個,變量年都是相同的三年。計算基於年份和類別的百分比差異

set.seed(100)  
df <- data.frame(year=c(2000, 2002, 2004),cat=rep(1:2,3), val=round(rnorm(6,5,3)*100,2)) 

    year cat val 
1 2000 1 349.34 
2 2002 2 539.46 
3 2004 1 476.32 
4 2000 2 766.04 
5 2002 1 535.09 
6 2004 2 595.59 

我想計算每個類別的基於2000年的年份之間的百分比差異。 兩個新的變量應該具有以下值(基於這個例子中)被添加:

pd   diff 
100  0 
70,43  -29,57 
136,35  +36,35 
100  0 
153,17  +53,17 
77,75  -22,25 

我試圖與DIFF()函數聚合()函數,但沒有得到結果。 我真的很感謝你的幫助。 感謝前方和快樂的聖誕節!

+0

你用軟件包好嗎?如果'dplyr'是'group_by'函數的好選擇 – brittenb

回答

3

這是一個dplyr解決方案。您需要按類別和年份對數據框架進行排序以利用dplyr::first(),因此我的輸出與您的輸出略有不同。

set.seed(100)  
df <- data.frame(year=c(2000, 2002, 2004),cat=rep(1:2,3), val=round(rnorm(6,5,3)*100,2)) 

library(dplyr) 
arrange(df,cat,year) %>% 
    group_by(cat) %>% 
    mutate(pd=val/first(val)*100, 
     diff=pd - first(pd)) 

Source: local data frame [6 x 5] 
Groups: cat [2] 

    year cat val  pd  diff 
    (dbl) (int) (dbl)  (dbl)  (dbl) 
1 2000  1 349.34 100.00000 0.00000 
2 2002  1 535.09 153.17170 53.17170 
3 2004  1 476.32 136.34854 36.34854 
4 2000  2 766.04 100.00000 0.00000 
5 2002  2 539.46 70.42191 -29.57809 
6 2004  2 595.59 77.74920 -22.25080