2016-06-23 7 views
0

Mein Datenrahmen besteht aus drei Spalten: Name des Staates, Jahr und Steuerbeleg für jedes Jahr und jeden Status. Unten ist ein Beispiel für nur einen Zustand.Verwenden Sie dplyr zum Berechnen der proportionalen Änderung

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

Ich möchte die Änderungen in Bezug auf den Anteil des Vorjahres Steuerbeleg berechnen (z (1977 Steuerbescheinigung - 1976 Steuereingang)/1976 Steuereingang). Der Code sieht wohl so aus:

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

Aber es funktioniert nicht, weil es die Prozentsätze in Bezug auf dieses Jahr Steuerbeleg zu berechnen. Wie verschiebe ich RealTaxRevs um eine Position rückwärts, so dass ich den Prozentsatz in Bezug auf den Steuerbeleg des Vorjahres berechnen kann? Oder ein eleganter Weg dahin in dplyr?

Antwort

0

Verwendung lag:

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

, die gut aussieht, aber warum die -1? – tnabdb

+0

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

+0

Ah ich sehe. Ist die verwendete Form numerisch stabiler? – tnabdb