2016-04-20 12 views
0

Ich haben diesen Datenrahmen:Aggregates durch Gruppe einschließlich Zählungen über die Reihen

YEAR NATION VOTE 
2015  NOR  1 
2015  USA  0 
2015  CAN  1 
2015  RUS  1 
2014  USA  1 
2014  USA  1 
2014  USA  0 
2014  NOR  1 
2014  NOR  0 
2014  CAN  1 

... und es geht weiter und weiter mit mehr Jahren, Nationen und Stimmen. VOTE ist binär, ja (1) oder nein (0). Ich versuche, eine Ausgabetabelle zu programmieren, die nach Jahr und Nation aggregiert, aber das bringt auch die Gesamtzahl der Stimmen für jede Nation (die Summe von Nullen und Einsen) zusammen mit der Gesamtzahl von Einsen in einer Ausgabetabelle wie der eine skizzierte unten (sumVOTES für das Volk die Gesamtzahl der Stimmen ist in diesem Jahr, das heißt die Summe aller 1 und 0):

YEAR NATION VOTE-1 sumVOTES %-1s 
2015  USA   8   17 47.1 
2015  NOR   7   13 53.8 
2015  CAN   3   11 27.2 
2014  etc. 
etc. 
+0

'select sum (vote = 1), zählen (abstimmen)', im Grunde. –

+1

'Aggregat (df $ VOTE, durch = df [, c ('JAHR', 'NATION')], FUN = Funktion (x) {c (VOTE.1 = Summe (x), sumVotes = Länge (x), Perc.1s = Summe (x)/Länge (x) * 100)}) ' –

Antwort

2

Sie sind nicht Ihre data.frame in einem reproducible manner bietet. Aber das sollte funktionieren ...

library(data.table) 
# assuming 'df' is your data.frame 
setDT(df)[, .('VOTE-1' = sum(VOTE==1), 
       'sumVOTES' = .N, 
       '%-1s' = 1e2*sum(VOTE==1)/.N), 
by = .(YEAR, NATION)] 

setDT wandelt data.frame unter Bezugnahme auf data.table.

+1

Mit' dplyr' Sie tun können, dass in drei einfachen Schritten: 1. Sum up pro Jahr und Nation 'Bibliothek (dplyr) '' d1 <- data %>% group_by (YEAR, NATION)%>% summarize (sum_of_year = Summe (Abstimmung)) ' 2. Sum up Stimmen pro Nation ' d2 <- data %>% group_by (NATION)%>% summarize (sum_of_1s = sum (VOTE)) ' 3. Zusammenführen der beiden erstellten Datenrahmen ' d 3 <- merge (d1, d2, durch = "NATION") ' – kbrunner

Verwandte Themen