2017-12-18 8 views
0

Es gab einige ähnliche Fragen, aber ich habe nicht eine, die mit meinem speziellen Fall hilft; Jedes Quartal wird eine Anzahl von Ereignissen für jeden Ereignisnamen aufgezeichnet. Für jedes Ereignis werden mehrere Durchgänge durchgeführt, um fehlende Zählungen zu erfassen. Ich möchte die prozentuale Änderung der Zählungen in jedem Durchlauf mit ihrer vorherigen Anzahl von Zählungen in ihrem jeweiligen Durchlauf vergleichen.Berechnen prozentuale Änderungen in einem Datenrahmen für Untergruppen über verschiedene Zeiträume

Dies sind die Daten, die ich zur Zeit (verschiedene Werte aber gleiches Format) habe:

ID <- c(221, 221, 345, 345, 209, 209, 209, 19, 19, 19, 536, 536, 536) 
Pass <- c(1, 2, 1, 2, 1, 2, 3, 1, 2, 3, 1, 2, 3) 
Event_count <- c(2000, 100, 2050, 150, 50000, 10000, 600, 51000, 11000, 700, 50500, 10500, 650) 
Event_name <- c(rep('filter', 4) , rep('observations', 9)) 
Date <- c(rep('2015-03-01',2) , rep('2015-06-01',2) , rep('2015-03-01',3) , rep('2015-06-01',3), rep('2015-09-01',3)) 
df <- data.frame(ID, Pass, Event_count, Event_name, Date) 

    ID Pass Event_count Event_name  Date 
1 221 1  2000  filter 2015-03-01 
2 221 2   100  filter 2015-03-01 
3 345 1  2050  filter 2015-06-01 
4 345 2   150  filter 2015-06-01 
5 209 1  50000 observations 2015-03-01 
6 209 2  10000 observations 2015-03-01 
7 209 3   600 observations 2015-03-01 
8 19 1  51000 observations 2015-06-01 
9 19 2  11000 observations 2015-06-01 
10 19 3   700 observations 2015-06-01 
11 536 1  50500 observations 2015-09-01 
12 536 2  10500 observations 2015-09-01 
13 536 3   650 observations 2015-09-01 

Und das ist der Ausgang Ich möchte (Wenn Sie einen besseren Weg denken, können diese Daten angezeigt werden Sie mich bitte, ! relativ Grundkenntnisse in der R)

Percentage_change <- c(NA, NA, 2.5, 50, NA, NA, NA, 2, 10, 16.67, -0.98, -4.55, -7.14) 
df2 <- data.frame(ID, Pass, Event_count, Event_name, Date,Percentage_change) 

    ID Pass Event_count Event_name  Date Percentage_change 
1 221 1  2000  filter 2015-03-01    NA 
2 221 2   100  filter 2015-03-01    NA 
3 345 1  2050  filter 2015-06-01    2.50 
4 345 2   150  filter 2015-06-01    50.00 
5 209 1  50000 observations 2015-03-01    NA 
6 209 2  10000 observations 2015-03-01    NA 
7 209 3   600 observations 2015-03-01    NA 
8 19 1  51000 observations 2015-06-01    2.00 
9 19 2  11000 observations 2015-06-01    10.00 
10 19 3   700 observations 2015-06-01    16.67 
11 536 1  50500 observations 2015-09-01    -0.98 
12 536 2  10500 observations 2015-09-01    -4.55 
13 536 3   650 observations 2015-09-01    -7.14 

ich habe nur haben, damit ich weiß nicht, ob es irgendwelche Pakete sind, die mir dabei helfen kann - jede Hilfe/Erklärungen, die Sie mit mir stark sein liefern kann, wird geschätzt.

Antwort

1

Dies scheint die Werte zurückgeben Sie

wollen
library(dplyr) 
df %>% 
    group_by(Event_name, Pass) %>% 
    mutate(Percentage_change=(Event_count/lag(Event_count)-1)*100) 
+0

Eine solche präzise Lösung, danke! Diese Methode macht es auch sehr einfach, die Änderung der absoluten Zahlen zu ändern, was ich als nächstes tun werde. – Maharero

Verwandte Themen