J'ai une base de données qui contient les valeurs du PIB par pays avec une colonne de date d'accompagnement. Le code suivant reproduit un ensemble de données de l'échantillon pour deux pays (FR et DE) et six ans (2005-2010):Calculer les pourcentages de changement dans les données "longues"
df <- structure(list(geo = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L), .Label = c("DE", "FR"), class = "factor"),
date = structure(c(12784, 13149, 13514, 13879, 14245, 14610,
12784, 13149, 13514, 13879, 14245, 14610), class = "Date"),
GDP = c(2147975, 2249584.4, 2373993.1, 2382892.6, 2224501.8,
2371033.2, 1557584.8, 1621633.2, 1715655.4, 1713157.1, 1636336.3,
1707966.5)), .Names = c("geo", "date", "GDP"), row.names = c(NA,
-12L), class = "data.frame")
Maintenant, je voudrais calculer une colonne supplémentaire qui montre le pourcentage année des différences sur l'année. Je les opérations suivantes:
library(quantmod)
# provides the Delt() function to calculate percent differences
df$dtGDP <- as.numeric(Delt(df$GDP))
Ceci est erroné, car il calcule une valeur pour FR en 2005 en utilisant le DE-valeur de 2010. Est-il possible d'appliquer la fonction « par niveau de facteur »?
Ceci est une question très typique "split-apply-combiner" à laquelle vous trouverez probablement réponses abondantes sur SO. – BenBarnes
@BenBarnes Encore j'ai aimé la réponse DWin ci-dessous! – Ali
En fait, @BenBarnes est probablement correct. Si vous recherchez "tapply" et "ave" vous trouverez probablement beaucoup d'exemples qui sont très similaires à la mienne. (D'un autre côté vous trouverez beaucoup d'exemples travaillés avec des fonctions de plyr-package qui sont essentiellement isomorphes l'une par rapport à l'autre et à celle-ci.) –