2017-12-01 4 views
1

Ich habe seit mehreren Monaten nicht codiert und bin jetzt mit dem folgenden Problem fest. Ich habe folgende Datenmenge:Neue Variable mit MUTATE hinzufügen: Wachstumsrate

Year World_export China_exp World_import China_imp 
1 1992  3445.534 27.7310  3402.505 6.2220 
2 1993  1940.061 27.8800  2474.038 18.3560 
3 1994  2458.337 39.6970  2978.314 3.3270 
4 1995  4641.168 15.9790  5504.787 18.0130 
5 1996  5680.688 74.1650  6939.291 25.1870 
6 1997  7206.604 70.2440  8639.422 31.9030 
7 1998  7069.725 99.6510  8530.293 41.5030 
8 1999  5916.077 169.4593  6673.743 37.8139 
9 2000  7331.588 136.2180  8646.253 47.3789 
10 2001  7471.374 143.0542  8292.893 41.2899 
11 2002  8074.975 217.4286  9092.341 46.4730 
12 2003  9956.433 162.2522 11558.007 71.7753 
13 2004 13751.671 282.8678 16345.452 157.0768 
14 2005 15976.238 430.8655 16708.094 284.1065 
15 2006 19728.935 398.6704 22344.856 553.6356 
16 2007 24275.244 484.5276 28693.113 815.7914 
17 2008 32570.781 613.3714 39381.251 1414.8120 
18 2009 21282.228 173.9463 28563.576 1081.3720 
19 2010 25283.462 475.7635 34884.450 1684.0839 
20 2011 41418.670 636.5881 45759.051 2193.8573 
21 2012 46027.529 432.6025 46404.382 2373.4535 
22 2013 37132.301 460.7133 43022.550 2829.3705 
23 2014 36046.461 640.2552 40502.268 2373.2351 
24 2015 26618.982 781.0016 30264.299 2401.1907 
25 2016 23537.354 472.7022 27609.884 2129.4806 

Was ich brauche, ist einfach: Wachstumsraten der einzelnen Variablen zu berechnen, dh die Differenz zwischen zwei Elementen finden, teilen sie durch das erste Element und mit 100 multiplizieren

ich versuche, ein Skript zu schreiben, das endet mit Fehlermeldung auf:

trade_Ch %>% 
    mutate ( 
     World_exp_grate = sapply(2:nrow(trade_Ch),function(i)((World_export[i]-World_export[i-1])/World_export[i-1])) 
     ) 

Fehler in mutate_impl (.data Punkte): Spalte World_exp_grate muss sein 25 Länge (die Anzahl der Zeilen) oder ein, nicht 24

obwohl dieses Stück Code gibt mir Recht Werte:

x <- sapply(2:nrow(trade_Ch),function(i)((trade_Ch$World_export[i]-trade_Ch$World_export[i-1])/trade_Ch$World_export[i-1])) 

So, allgemein gesprochen, ich richtig jede Unterstützung zu schätzen wissen würde das Einbetten der Code in meinem MUTATE Teil von dplyr Paket.

ODER

Wenn es eine andere elegante Möglichkeit, dieses Problem zu lösen, wäre für alle Anregungen dankbar.

+0

try 'trace_Ch%>% mutieren (world_exp_grate = (World_export - Verzögerung (World_export)/Verzögerung (World_explort))' – akrun

Antwort

0

hoffe, das hilft!

library(dplyr) 
df %>% 
    mutate_each(funs(chg = ((.-lag(.))/lag(.))*100), World_export:China_imp) 
+0

Wow! Das funktioniert am besten für mich. Ich bin beeindruckt) Danke Kumpel! – dkolkin

+0

Froh, dass es geholfen hat :) Prost! – Prem

+0

'mutate_each' ist nach meinem Wissen veraltet. Verwenden Sie stattdessen mutate_at. – Tino

0

Das Problem ist, dass Sie das World_exp_grate für Ihre erste Zeile nicht berechnen können. Daher müssen Sie es auf NA setzen.

Eine Variante dieses Problem zu lösen ist

trade_Ch %>% 
    mutate (World_export_lag = lag(World_export), 
      World_exp_grate = (World_export - World_export_lag)/World_export_lag)) %>% 
    select(-World_export_lag) 

lag den Vektor um eine Position verschiebt.

lag(1:5) 

# [1] NA 1 2 3 4 
+0

Danke an die Ursache des Problems für den Hinweis I zwar über Werte am Ende fehlt. der Tabelle, nicht am Anfang. Das heißt, es gibt keine Werte für 2017 und ich vermute, dass dies das Problem verursachen. – dkolkin

1

Wir

tun
trade_Ch %>% 
    mutate(world_exp_grate = 100*(World_export - lag(World_export))/lag(World_export)) 
+1

Das ist toll! So einfach! – dkolkin

Verwandte Themen