2016-07-14 7 views
1

Ich möchte hinzufügen, ein paar Spalten zum d2 Datenrahmen, die aus dem "Ergebnis" Vektor in der "d" Datenrahmen stammen. Gibt es einen einfachen Weg, dies zu tun?erstellen Übersichtstabelle nach dplyr Aktion

Hier ist der Datenrahmen "d". Beachten Sie, dass die Ergebnisspalte der Mittelwert jeder FLAG-Kombination der Gruppen & ist. 3, dh der Mittelwert der Gruppe A, wenn Flag = 0

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 = 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)) 

    as.data.frame(d) 
     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 

Nun würde Ich mag eine Übersichtstabelle haben, wo ich die große Gruppe zeigen bedeuten, die in der „mu“ Spalte bereits vorhanden ist, aber ich würde Ich möchte 2 weitere Spalten "mu_1" und "mu_0" hinzufügen, die ich unten manuell hinzugefügt habe. Gibt es einen effizienten Weg, dies zu tun?

Vielen Dank.

d2 = d %>% group_by(group) %>% 
     summarise(U = mean(U), 
        L = mean (L), 
        mu= mean(mu) 
        ) 
     as.data.frame(d2) 



group U L  mu mu_1 mu_0 
1  A 8.5 -1.5 19.16667 100  3 
2  B 18.5 8.5 177.50000 1000 13 
+0

Wie berechnen Sie 'mu_1' ​​und' mu_0'? Ist dies der Min- und Max-Wert von 'result' für jede Gruppe? –

+0

Sie wären der Mittelwert des Ergebnisvektors nach Gruppe und Flag .... Mittelwert (Ergebnis) nach Gruppe und Flag – user3022875

+1

Add 'mu_1 = max (result [flag == 1])' und 'mu_0 = max (result [ flag == 0]) 'zum letzten' summieren' Teil – Jaap

Antwort

3

könnten Sie tun:

Welche gibt:

## A tibble: 2 x 6 
# group  U  L  mu mu_1 mu_0 
# <fctr> <dbl> <dbl>  <dbl> <dbl> <dbl> 
#1  A 8.5 -1.5 19.16667 100  3 
#2  B 18.5 8.5 177.50000 1000 13 

Oder Sie könnten zwei verschiedene Zusammenfassungen (eine von group und flag, die andere von group gruppiert ausführen nur) und left_join() sie zusammen:

library(dplyr) 
library(tidyr) 
d %>% 
    group_by(group, flag) %>% 
    summarise(mean = mean(result)) %>% 
    spread(flag, mean, sep = "-mu") %>% 
    left_join(d %>% 
       group_by(group) %>% 
       summarise_each(funs(mean), U, L, mu), .) 

Welche gibt:

## A tibble: 2 x 6 
# group  U  L  mu flag-mu0 flag-mu1 
# <fctr> <dbl> <dbl>  <dbl> <dbl> <dbl> 
#1  A 8.5 -1.5 19.16667  3  100 
#2  B 18.5 8.5 177.50000  13  1000