2016-06-23 4 views
0

私のデータフレームは、州名、年、および各年および各州の税額控除の3つの列で構成されています。以下は1つの状態の例です。dplyrを使用して比例的な変更を計算する

year RealTaxRevs 
1 1971  8335046 
2 1972  9624026 
3 1973 10498935 
4 1974 10052305 
5 1975  8708381 
6 1976  8911262 
7 1977 10759032 

私は前年度税の領収書のパーセンテージの変化を計算したいと思います(例えば(1977税の領収書 - 1976税領収書)/ 1976税領収書)。コードは、おそらく次のようになります。

data %>% group_by(state) %>% mutate(change = c(NA, diff(RealTaxRevs)/RealTaxRevs 

しかし、それは、今年の税の領収書に対する割合を計算していますので、それは動作しません。 RealTaxRevsを1か所下位にシフトさせて、前年の納税受領額に対する割合を計算する方法を教えてください。それとも、dplyrのエレガントな方法ですか?

答えて

0

使用lag

library(dplyr) 
data %>% 
    group_by(state) %>% 
    mutate(change = RealTaxRevs/lag(RealTaxRevs) - 1) 
+0

偉大に見えますが、なぜ-1? – tnabdb

+0

'(a - b)/ b =(a/b - 1)' – bergant

+0

ああそうだね。使用するフォームは数値的に安定していますか? – tnabdb

関連する問題