2016-07-14 9 views
0

Ich habe die d2 Datenrahmen unten, und ich möchte eine a Spalte hinzufügen, die der Durchschnitt von x nach Gruppe und Flag ist. Aber ich füge die Markierungsspalte in den Mutationscode ein und ich bin nicht sicher, wie man dann einen Durchschnitt durch Gruppe AND Markierungsfahne addiert.Spalte mit dplyr mit Mutate dann Mittelwertbildung

d = data.frame(x=c(seq(1,5,1),seq(11,15,1),100,1000),group= c(rep("A",5),rep("B",5),"A","B")) 
    d 
    d2 = d%>% 
     group_by(group) %>% 
     mutate( 
        U=quantile(x, 0.75) + 1.5*IQR(x), 
        L=quantile(x, 0.25) - 1.5*IQR(x), 
        flag = ifelse(x>U | x<L,1,0), 
        mu = mean(x) 
        ) 
    as.data.frame(d2) 

Ich habe ein "Ergebnis" Vektor für hinzugefügt, was das Ergebnis

 x group U L flag  mu result 
1  1  A 8.5 -1.5 0 19.16667  3 
2  2  A 8.5 -1.5 0 19.16667  3 
3  3  A 8.5 -1.5 0 19.16667  3 
4  4  A 8.5 -1.5 0 19.16667  3 
5  5  A 8.5 -1.5 0 19.16667  3 
6 11  B 18.5 8.5 0 177.50000  13 
7 12  B 18.5 8.5 0 177.50000  13 
8 13  B 18.5 8.5 0 177.50000  13 
9 14  B 18.5 8.5 0 177.50000  13 
10 15  B 18.5 8.5 0 177.50000  13 
11 100  A 8.5 -1.5 1 19.16667 100 
12 1000  B 18.5 8.5 1 177.50000 1000 


note having  group_by(group,flag) 

returns 

Error: unknown variable to group by : flag 
+1

Ich bin mir nicht sicher, ob ich folge. Laut deiner 'ifelse()' willst du den Mittelwert nur wenn 'flag == 1' sonst' 0'? Dies spiegelt nicht die Spalte "Ergebnis" oben wider. Ich denke, was Sie suchen, ist einfach zu Ihrem ersten Code hinzufügen '...%>% group_by (Gruppe, Flagge)%>% mutate (Ergebnis = Mittel (x))' –

+0

Ich glaube, ich war verwirrend. Ich suche nach dem Ergebnis im Ergebnisvektor. Sehen Sie, wie es den Durchschnitt nach Gruppe und Flagge zurückgibt. Group_by (Gruppe, Flag) gibt zurück und Fehler, weil Flag noch nicht berechnet ist – user3022875

Antwort

2

einfach group_by(group, flag) an die Kette nach dem ersten Operationen hinzufügen und mutate() dann sein sollte:

d %>% 
    group_by(group) %>% 
    mutate( 
    U = quantile(x, 0.75) + 1.5 * IQR(x), 
    L = quantile(x, 0.25) - 1.5 * IQR(x), 
    flag = ifelse(x > U | x < L, 1, 0), 
    mu = mean(x)) %>% 
    group_by(group, flag) %>% 
    mutate(result = mean(x)) 

Was gibt:

#Source: local data frame [12 x 7] 
#Groups: group, flag [4] 
# 
#  x group  U  L flag  mu result 
# <dbl> <fctr> <dbl> <dbl> <dbl>  <dbl> <dbl> 
#1  1  A 8.5 -1.5  0 19.16667  3 
#2  2  A 8.5 -1.5  0 19.16667  3 
#3  3  A 8.5 -1.5  0 19.16667  3 
#4  4  A 8.5 -1.5  0 19.16667  3 
#5  5  A 8.5 -1.5  0 19.16667  3 
#6  11  B 18.5 8.5  0 177.50000  13 
#7  12  B 18.5 8.5  0 177.50000  13 
#8  13  B 18.5 8.5  0 177.50000  13 
#9  14  B 18.5 8.5  0 177.50000  13 
#10 15  B 18.5 8.5  0 177.50000  13 
#11 100  A 8.5 -1.5  1 19.16667 100 
#12 1000  B 18.5 8.5  1 177.50000 1000