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 Alors, est là un moyen facile de transformer des données qui ressemblent à ceci: p> dans quelque chose comme ceci: p> pour code> en boucle, puis décidé qu'il était temps de venir à Stackoverflow pour obtenir de l'aide.
country country.isocode period AvPOP Avci Avgrgdpch
Argentina ARG 1 18230 17.38474 1.423454
...
Venezuela VEN 12 25274 21.45343 5.454334
4 Réponses :
Utilisez Couper code> sur votre variable d'année pour effectuer la variable de période, puis utilisez
MAXT code> et
CAST CODE> à 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 p>
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
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.
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
Il existe une base de base et une réponse maintenant, en utilisant Plyr code>, donc pour la complétude, voici une réponse basée sur
dplyr code>. Utilisation des données de jouets données par Joris, nous avons
couper code> pour créer les périodes, nous pouvons ensuite le regrouper et obtenir les moyens: p>