2016-03-24 15 views
0

Ich versuche eine Durchschnittsvariable zu erstellen, die den mittleren Länderwert für Beobachtungen innerhalb eines Landes über verschiedene Jahre hinweg berechnet.R: Jährliche/innerhalb der Länderdurchschnittswerte erstellen

Meine Daten sieht wie folgt aus:

party_id year country position 
    101 1984  be  2.75 
    101 1988  be  2.75 
    101 1992  be  3.33 
    101 1996  be  3.67 
    102 1984  be  5.80 
    102 1988  be  5.80 

Zum Beispiel möchte ich eine mittlere Größe, die die mittlere Position aller Parteien in Belgien für das Jahr 1984, und so weiter haben.

Antwort

2

aggregate Verwenden Sie können die durchschnittliche nach Land und Jahr bekommen

aggregate(position ~ country + year, data = df, mean) 

    country year position 
1  be 1984 4.275 
2  be 1988 4.275 
3  be 1992 3.330 
4  be 1996 3.670 

Eine andere, vielleicht besser lesbar, Art und Weise ist dplyr

library(dplyr) 
df %>% 
    group_by(country, year) %>% 
    summarise(mean(position)) 

bearbeiten zu verwenden - OP Anfrage Variable hinzufügen Daten, die Sie verwenden können mutate

df %>% 
    group_by(country, year) %>% 
    mutate(mean(position)) 

Basislösung vorgeschlagen von @bouncyball

merge(x = df,y = aggregate(position~year+country, data = df, FUN = mean), 
     by = c('year','country')) 
+0

Danke, wie würde ich eine neue Variable mit den Mitteln dann schaffen, so dass die Anzahl der Zeilen groß genug ist, und die Beobachtungen zusammenpassen? – snn

+0

@snn siehe Update – cdeterman

+1

In der Basis könnte man: 'fusionieren (x = df, y = Aggregat (pos ~ Jahr + Land, Daten = df, FUN = Mittel), by.x = c ('Jahr', 'Land '), by.y = c (' Jahr ',' Land ')) ' – bouncyball