2017-06-01 34 views
2

Hallo Ich versuche, eine neue Variable mit dplyr erstellen. Meine Daten sehen wie folgt aus:R: Erstellen neuer Variablen mit Bedingungen mit dplyr

   Land  happy  year 
       <fctr> <int>  <dbl> 
      1 Country1 09  2002 
      2 Country1 08  2012 
      3 Country3 05  2008 
      ... 

Um eine Variable mit dem Mittelwert der glücklichen pro Land und Jahr zu erstellen, habe ich diesen Code verwendet:

New <-df %>% 
     group_by(Land, year) %>% 
     mutate(mean.happy = mean(happy, na.rm=T)) 

Nun würde Ich mag eine Variable machen mit dieser Inhalt: (Mittel von glücklich in 2012) - (Mittel von glücklich in 2008) für jedes Land.

Wie kann ich eine neue Variable mit diesen Bedingungen erstellen?

Antwort

1

Hier ist eine data.table-Lösung. Es ist in der Regel schneller

library(data.table) 

dt = read.table("clipboard", header = TRUE) 
setDT(dt) 

dt[ , "mean.happy" := mean(happy), by = .(Land, year)] 

dt[ , "diff.happiness" := mean(happy[year == 2012]) - mean(happy[year == 2008])] 

> dt 
     Land happy year mean.happy diff.happiness 
1: Country1  9 2002   9    3 
2: Country1  8 2012   8    3 
3: Country3  5 2008   5    3 
2

Hier ist eine dplyr/tidyr Lösung.

library(dplyr) 
library(tidyr) 

df <- df %>% 
     group_by(Land, year) %>% 
     mutate(mean.happy = mean(happy, na.rm=T)) %>% 
     spread(year, mean.happy) 
Verwandte Themen