8
votes

R: Calcul des moyennes de 5 ans dans les données du panel

J'ai un panneau équilibré par pays de 1951 à 2007 dans une trame de données. Je voudrais le transformer en une nouvelle trame de données de moyennes de cinq ans de mes autres variables. Quand je me suis assis pour faire cela, j'ai réalisé la seule façon dont je pouvais penser à faire cela impliquait un pour code> en boucle, puis décidé qu'il était temps de venir à Stackoverflow pour obtenir de l'aide.

Alors, est là un moyen facile de transformer des données qui ressemblent à ceci: p> xxx pré>

dans quelque chose comme ceci: p>

country   country.isocode period   AvPOP     Avci Avgrgdpch
Argentina             ARG      1   18230 17.38474  1.423454
...
Venezuela             VEN     12   25274 21.45343  5.454334


0 commentaires

4 Réponses :


1
votes

Utilisez Couper sur votre variable d'année pour effectuer la variable de période, puis utilisez MAXT et CAST à partir du package de remodelage pour obtenir les moyennes. Il y a beaucoup d'autres réponses qui peuvent vous montrer comment; Voir https://stackoverflow.com/questions/tagged/r+reshape


0 commentaires

3
votes

Pour ce type de problème, le paquet Plyr est vraiment phénoménal. Voici un certain code qui vous donne ce que vous voulez dans essentiellement une seule ligne de code plus une petite fonction d'assistance.

> pwt.ma
     country      period   year       pop       ci    rgdpch
1  Argentina (1945,1950] 1950.0 17150.336 13.29214  7736.338
2  Argentina (1950,1955] 1953.0 18226.699 17.80839  7730.874
3  Argentina (1955,1960] 1958.0 19945.149 17.42693  8410.610
4  Argentina (1960,1965] 1963.0 21616.623 19.09067  9000.918
5  Argentina (1965,1970] 1968.0 23273.736 18.89005 10202.665
6  Argentina (1970,1975] 1973.0 25216.339 19.70203 11348.321
7  Argentina (1975,1980] 1978.0 27445.430 23.34439 11907.939
8  Argentina (1980,1985] 1983.0 29774.778 17.58909 10987.538
9  Argentina (1985,1990] 1988.0 32095.227 15.17531 10313.375
10 Argentina (1990,1995] 1993.0 34399.829 17.96758 11221.807
11 Argentina (1995,2000] 1998.0 36512.422 19.03551 12652.849
12 Argentina (2000,2005] 2003.0 38390.719 15.22084 12308.493
13 Argentina (2005,2010] 2006.5 39831.625 21.11783 14885.227
14 Venezuela (1945,1950] 1950.0  5009.006 41.07972  7067.947
15 Venezuela (1950,1955] 1953.0  5684.009 44.60849  8132.041
16 Venezuela (1955,1960] 1958.0  6988.078 37.87946  9468.001
17 Venezuela (1960,1965] 1963.0  8451.073 26.93877  9958.935
18 Venezuela (1965,1970] 1968.0 10056.910 28.66512 11083.242
19 Venezuela (1970,1975] 1973.0 11903.185 32.02671 12862.966
20 Venezuela (1975,1980] 1978.0 13927.882 36.35687 13530.556
21 Venezuela (1980,1985] 1983.0 16082.694 22.21093 10762.718
22 Venezuela (1985,1990] 1988.0 18382.964 19.48447 10376.123
23 Venezuela (1990,1995] 1993.0 20680.645 19.82371 10988.096
24 Venezuela (1995,2000] 1998.0 22739.062 20.93509 10837.580
25 Venezuela (2000,2005] 2003.0 24550.973 17.33936 10085.322
26 Venezuela (2005,2010] 2006.5 25832.495 24.35465 11790.497


3 commentaires

Vous devrez m'expliquer la différence entre une moyenne de cinq ans (la demande) et une moyenne roulante (ma réponse).


Une moyenne moyenne de cinq ans 1951-1955, 1956-1960, ... une moyenne moyenne de 1951-1955, 1952-1956, ...


Merci. J'ai maintenant modifié la réponse pour le refléter.



11
votes

Ceci est le contenu agrégat code> est fait pour. :

Df <- data.frame(
    year=rep(1951:1970,2),
    country=rep(c("Arg","Ven"),each=20),
    var1 = c(1:20,51:70),
    var2 = c(20:1,70:51)
)

Level <-cut(Df$year,seq(1951,1971,by=5),right=F)
id <- c("var1","var2")

> aggregate(Df[id],list(Df$country,Level),mean)
  Group.1     Group.2 var1 var2
1     Arg [1951,1956)    3   18
2     Ven [1951,1956)   53   68
3     Arg [1956,1961)    8   13
4     Ven [1956,1961)   58   63
5     Arg [1961,1966)   13    8
6     Ven [1961,1966)   63   58
7     Arg [1966,1971)   18    3
8     Ven [1966,1971)   68   53


0 commentaires

1
votes

Il existe une base de base et une réponse Plyr , donc pour la complétude, voici une réponse basée sur dplyr . Utilisation des données de jouets données par Joris, nous avons xxx

maintenant, en utilisant couper pour créer les périodes, nous pouvons ensuite le regrouper et obtenir les moyens: xxx


0 commentaires