2017-04-11 5 views
0

Ich habe ein df wie:Prozentsatz über insgesamt in Untergruppen

Country is_sale count 
AU  1  10 
AU  0  30 
SE  1  5 
SE  0  4 

Ich würde Prozentsatz der Verkäufe bekommen (is_sale = 1) über die gesamte je nach Länderebene:

Land perc
AU SE

die Eingabe wäre:

country ratio 
AU  0.23 
SE  0.55 

Wie erreiche ich das optimal mit dplyr?

+0

@docendodiscimus Es ähnlich wie bei Ihnen ist, aber ich war auf diese Weise zu arbeiten, wenn Sie den Kommentar geschrieben – akrun

+0

@docendodiscimus Sie, dass als Lösung veröffentlichen können. Es sieht wirklich gut aus. Ich poste es nicht, als du auf die Idee kamst. Was ich meinte, war, dass ich alle Kombinationen/Permutationen machte, um eine Antwort zu finden. Ich habe gerade den Kommentar aktualisiert, um den Kommentar zu kommentieren – akrun

+0

@docendodiscimus Ich entfernte den Kommentar. Es ist alles Deins. Ich denke, es war ein Fehler von meiner Seite. Normalerweise aktualisiere ich die Kommentare nicht wie diese – akrun

Antwort

0

Ich würde Ihre binäre Flagge in eine boolesche konvertieren, da es die logische Auswertung ein wenig einfacher macht. Dann können Sie mit dplyr nach Country gruppieren und Ihren Zähler und Nenner in zwei Schritten einer zusammenfassenden Funktion berechnen.

Beachten Sie die Fähigkeit, in der zweiten Zeile des Zusammenfassungsschritts auf ratio zu verweisen; Dies ist eines der Dinge, die dplyr sehr prägnant macht.

library(dplyr) 
Country = c('AU','AU','SE','SE') 
is_sale = c(1,0,1,0) %>% as.logical 
count = c(10,30,5,4) 

df = data.frame(Country, is_sale, count) 
df %>% 
    group_by(Country) %>% 
    summarize(
    ratio = sum(ifelse(is_sale, count, 0)), 
    ratio = ratio/sum(count) 
) 
+0

danke! Ich mag diese Antwort – xxxvinxxx