2016-03-30 1 views
0

Für eine Probe Datenrahmen:Aggregatdaten auf zwei Spalten mit dplyr in R

df <- structure(list(output.code = structure(1:15, .Label = c("E00000001", 
     "E00000003", "E00000005", "E00000007", "E00000010", "E00000012", 
     "E00000013", "E00000014", "E00000016", "E00000017", "E00000018", 
     "E00000019", "E00000020", "E00000021", "E00000022"), class = "factor"), 
     all.usual = c(194L, 250L, 367L, 123L, 102L, 213L, 216L, 154L, 
     281L, 290L, 218L, 139L, 226L, 282L, 223L), same.address = c(176L, 
     218L, 288L, 83L, 80L, 196L, 134L, 125L, 228L, 218L, 189L, 
     112L, 185L, 235L, 192L), lsoa.code = structure(c(1L, 1L, 
     1L, 1L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L), .Label = c("E01000001", 
     "E01000002", "E01000003"), class = "factor")), .Names = c("output.code", 
     "all.usual", "same.address", "lsoa.code"), class = "data.frame", row.names = c(NA, 
     -15L)) 

Ich versuche, zwei Spalten in einen neuen Datenrahmen zu aggregieren dplyr verwenden.

Für eine Spalte, fand ich dies funktioniert:

library(dplyr) 
df %>% 
    group_by(lsoa.code) %>% 
    summarise(all.usual = sum(all.usual)) 

Aber ich möchte die Werte aller ‚lsoa.codes‘ für die beiden Variablen (same.address und all.usual) summieren.

funktioniert das nicht:

df %>% 
    group_by(lsoa.code) %>% 
    summarise(all.usual = sum(all.usual) 
    summarise(same.address = sum(same.address)) 

Kann jemand bitte beraten, wie dieser Code die beiden Spalten aggregieren angepasst werden kann?

Auch ich möchte einen Datenrahmen aus den Ergebnissen erstellen.

Vielen Dank im Voraus.

+2

Verwendung 'summarise_each (Spaße (sum), all.usual, same.address)' 'oder zusammenfassen (all.usual = sum (all.usual), same.address = sum (same.address)) ' – Jaap

+0

Nehmen Sie die erste Lösung von @ProcrastinatusMaximus. Es ist gut, den richtigen Weg zu lernen –

Antwort

2

Gefällt mir das?

df %>% 
    group_by(lsoa.code) %>% 
    summarise(all.usual = sum(all.usual), same.address = sum(same.address))