2016-04-22 12 views
0

Diese Frage baut auf einer anderen Frage auf, die ich zuvor gestellt habe. In Anbetracht der MWE unter:R & dplyr: aggregieren und Summenvariablen erstellen

test <- as.data.table(data.frame(event_id = c("A","B","A","A","B"), 
           income = c(1,2,3,4,5), 
           location = c("PlaceX","PlaceY","PlaceX","PlaceX","PlaceY"))) 

test 
    event_id income location 
1:  A  1 PlaceX 
2:  B  2 PlaceY 
3:  A  3 PlaceX 
4:  A  4 PlaceX 
5:  B  5 PlaceY 

Wie würde ich bekommen:

event_id mean_inc loc_PlaceX loc_PlaceY 
    (fctr) (fctr)  (numeric)  (numeric) 
1  A 2.666667    3    0 
2  B 3.500000    0    2 

Was ich habe, so weit:

test %>% 
    group_by(event_id, location) %>% 
    summarise(mean_inc = mean(income)) 

Source: local data table [2 x 3] 
Groups: event_id 

    event_id location mean_inc 
    (fctr) (fctr) (dbl) 
1  A PlaceX 2.666667 
2  B PlaceY 3.500000 

Bitte beachten Sie, ich habe etwa 10 Spalten, die ich würde zu breakdown wie ich versuche mit der Spalte location oben zu tun. Außerdem gibt es Millionen von Zeilen.

+0

Vielleicht ein Tutorial auf dplyr und tidyr lesen erfolgen. – Frank

+0

@Frank das ist hilfreich, danke – user2205916

+1

können Sie versuchen, diese test%>% group_by (event_id, location)%>% zusammenfassen (mean_inc = mean (Einkommen), count = n()) 'Es wird Ihnen die Anzahl geben der Position in 1 Spalte, können Sie dann die Ergebnisse für die gewünschte Ausgabe umformen –

Antwort

0

Da der OP ein data.table zeigte, kann es mit data.table Methoden

test[, mean_inc := mean(income), event_id] 
dcast(test, event_id+mean_inc~location, value.var="income", length) 
#  event_id mean_inc PlaceX PlaceY 
#1:  A 2.666667  3  0 
#2:  B 3.500000  0  2 
Verwandte Themen