2017-08-19 2 views
-2

Ich möchte verstehen, wie zu tun, "Gruppe durch" und "zählen" -Funktionalität in der Ordinate durchführen. Ich habe mir ein paar Posts angeschaut, ohne zu finden, was ich wollte; Wenn es eine Antwort auf diese Frage gibt, würde ich mich über den Link freuen.Gibt es ein sauberes Gegenstück zu SELECT ... COUNT (*) ... GROUP BY ...?

Zum Beispiel suche ich nach Ausreißern in Daten; Ich möchte wissen, welche Orte die meisten „schlecht“ Maßnahmen erhalten:

place = rep(c('AL','AK','AZ','AR','CA','CO','CT','DE','FL','GA','HI'), times=4) 
measure = rep(c('meas1','meas2','meas3','meas4'), each=11) 
set.seed(200) 
rating = sample(c('good','bad'), size = 44, prob=c(2,1), replace=T) 
df = data.frame(place, measure, rating) 

> df 
    place measure rating 
1  AL meas1 good 
2  AK meas1 good 
3  AZ meas1 good 
4  AR meas1 bad 
5  CA meas1 bad 
6  CO meas1 bad 
7  CT meas1 bad 
8  DE meas1 good 
9  FL meas1 good 
10 GA meas1 good 
     ....(etc)..... 

Ich möchte verstehen, wie dies zu tun, um die tidyverse verwenden. Dieser Ansatz sqldf mit gibt mir, was ich will, also sagt mir, welche Orte sich die „schlechten“ Bewertungen hatte, und ordnet die Orte durch ihre „bad-ness“

library(sqldf)  
sqldf("SELECT place, rating, COUNT(*) AS Count FROM df GROUP BY place, rating ORDER BY rating, count DESC"). 

    place rating Count 
1  CA bad  3 
2  AK bad  2 
3  AR bad  1 
4  CO bad  1 
5  CT bad  1 
6  DE bad  1 
7  FL bad  1 
8  GA bad  1 
9  AL good  4 
10 AZ good  4 
11 HI good  4 
    ....(etc).... 

Gibt es eine Möglichkeit um ähnliche Ergebnisse zu tun bekommen im ordentlichen?

+1

Versuchen Sie 'df%>% count (Ort, Bewertung)%>% arrangieren (Bewertung, desc (n))' –

+0

können Sie das ein wenig erklären oder entfalten? es tut sicherlich, was ich gehofft habe. – cumin

+3

Probieren Sie '? Count',' 'arrangement' und' 'desc' aus .. das Lesen des Handbuchs könnte Ihnen helfen, ein oder zwei Dinge auf dem Weg zu lernen –

Antwort

1

Eine Einführung in diese grundlegenden Operationen in der tidyverse, ich Lesen Wickham und in erster Linie für Daten Wissenschaft R ausgezeichnet ist Grolemund empfehlen würde: http://r4ds.had.co.nz/

können Sie dplyr und magrittr Pakete verwenden das zu tun folgende in einer leicht zu folgen Weg:

# Install the tidyverse 
library(tidyverse) 

# Create data 
place = rep(c('AL','AK','AZ','AR','CA','CO','CT','DE','FL','GA','HI'), times=4) 
measure = rep(c('meas1','meas2','meas3','meas4'), each=11) 
set.seed(200) 
rating = sample(c('good','bad'), size = 44, prob=c(2,1), replace=T) 
df = data.frame(place, measure, rating) 

# Do some analysis 
df %>% 
    group_by(place) %>% 
    summarise(mean_score = mean(rating == "good"), n = n()) %>% 
    arrange(desc(mean_score)) 

Hier haben wir „Gruppe von“ Restaurant Name „dann“ „zusammenfassen“ jede Gruppierung durch die mittlere Anzahl von ‚guten‘ Bewertungen erhielt er (eine neue Variable erstellen), "Dann" "ordnen" Sie die Ausgabe in absteigender Reihenfolge durch dieses "mean_sco" an Re'.

Wir erstellen auch die neue Variable 'n' in der summarize-Funktion, die die Anzahl der Bewertungen zählt, auf der jeder Mittelwert basiert (dh wenn wir sehen, dass ein Restaurant nur 2 Bewertungen hat, wissen wir, dass der Mittelwert nicht repräsentativ sein (siehe http://www.evanmiller.org/how-not-to-sort-by-average-rating.html für ein umfassendes Beispiel).

+1

Das ist eine gute Antwort, aber ich bin mir nicht sicher über die Rechtmäßigkeit Ihres ersten Links. –

+0

Was meinen Sie mit der Rechtmäßigkeit der Verbindung? Dies ist ein nichtkommerzielles, genanntes Zitat von Open-Source-Material, das unter den Creative Commons Namensnennung-Keine kommerzielle Nutzung-NoDerivs 3.0 lizenziert ist. – prestono

+0

Entschuldigung, Sie haben Recht, es ist in Ordnung. Die Seite lud mich nicht auf, und ich überprüfte und sah, dass das Buch in den Läden verkauft wurde, also hatte ich angenommen, dass es eine Raubkopie war. –