2016-07-11 19 views
0

Ich habe einen Datensatz mit zwei Spalten, Metro, Zustand. Ich gebe den folgenden Befehl in dplyr,Filter Zeilen basierend auf der dplyr groupby, summaraize Ausgabe

data %>% group_by(metro, State) %>% summarise(count = n()) 

ich die folgende Ausgabe,

metro   State   count 
A    OH   703 
A    NJ    3 
B    GA   1453 
B    CA   456 
B    WA   123 

Ich möchte jetzt die Zeilen in der Datenrahmen, um herauszufiltern, die nur die maximalen Zählungen sind und lassen Sie die restlichen . Ich muss die entsprechenden Zeilen herausfiltern. Der Ausgang nach den Zeilen für den folgenden Befehl eines Ausfiltern sollte, seine

data %>% group_by(metro, State) %>% summarise(count = n()) 

    metro   State   count 
    A    OH   703 
    B    GA   1453 

Wo jede Metro einzigen Zustand aufweist, die der Zustand mit maximalen Zählungen und entfernt werden, bleibt.

Nachstehend ist mein Versuch,

data %>% group_by(metro, State) %>% filter(n() == max(n())) 

Aber das ist wieder den gleichen Datenrahmen als Eingabe heraus geben.

Kann mir jemand dabei helfen? Meine Ausgabe sollte sein, dass jede Metro einen eindeutigen Status haben sollte, der die maximale Anzahl hat und die restlichen Statuseinträge sollten entfernt werden.

Dank

+1

'data%>% group_by (U-Bahn)%>% -Filter (count == max (count))' – Psidom

+0

@Psidom Diese nutzen immer noch gibt mir die gleiche Ausgabe, denn wenn wir per U-Bahn gruppieren, addiert sich die Zählung und wir können die maximalen Einträge nicht herausfiltern. – haimen

+0

@Psidom Ich bin in der Lage, nach dem Zusammenfassen herauszufiltern .. Meine Frage ist, den ursprünglichen Datenrahmen mit den entsprechenden Zeilen herauszufiltern. Wenn der Datenrahmen zuvor 2738 Zeilen hatte, brauche ich 2156 Zeilen erst nach dem Filtern. Die Zeilen, die (3, 456, 123) entsprechen, sollten entfernt werden. – haimen

Antwort

3

Sie benötigen ein zweistufiger groupby zunächst groupby Metro und Zustand der Zählung und dann U-Bahn-GROUPBY und Zählung herauszufiltern, die in jeder U-Bahn nicht gleich der max Zaehler ist:

data1 <- data %>% group_by(metro, State) %>% mutate(count = n()) %>% 
        group_by(metro) %>% filter(count == max(count)) 

nrow(data1) 
+0

Ich bin nicht sicher, warum Sie unterschiedliche Ergebnisse erhalten. Aber das scheint für mich zu funktionieren. Ist das was du brauchst? – Psidom

+0

Das ist nicht die Voraussetzung meiner Frage. Ich habe meine Erklärung in dem Kommentar gegeben. Ich möchte die entsprechenden Zeilen im Datenrahmen entfernen. Nicht die zusammengefassten Zeilen. – haimen

+0

Ich bin in der Lage, nach dem Zusammenfassen herauszufiltern .. Meine Frage ist, den ursprünglichen Datenrahmen mit den entsprechenden Zeilen herauszufiltern. Wenn der Datenrahmen zuvor 2738 Zeilen hatte, brauche ich 2156 Zeilen erst nach dem Filtern. Die Zeilen, die (3, 456, 123) entsprechen, sollten entfernt werden. – haimen

0

Wir können auch data.table

library(data.table) 
setDT(data)[, count := .N , .(metro, state)][, .SD[count == max(count)] , .(metro)]