Wie verwende ich Dplyr's Summarize und which () um Min / Max-Werte zu suchen

8

Ich habe folgende Daten:

%Vor%

Und ich würde gerne dplyr zu

verwenden

(1) gruppiere die Daten nach "Gruppe" (2) zeigen das minimale und maximale Alter innerhalb jeder Gruppe an (3) zeige den Namen der Person mit dem Mindest- und Höchstalter

Der folgende Code tut das:

%Vor%

Was gut funktioniert:

%Vor%

Ich habe jedoch ein Problem, wenn mehrere Min- oder Max-Werte vorhanden sind:

%Vor%

Ich suche nach zwei Lösungen:

(1) wo es egal ist, welcher Min- oder Max-Name angezeigt wird, wird nur dieser angezeigt (d. h. der erste gefundene Wert) (2) wo, wenn es "Bindungen" gibt, werden alle minimalen Werte und maximalen Werte gezeigt

Bitte lassen Sie mich wissen, wenn dies nicht klar ist und danke im Voraus!

    
dreww2 12.05.2015, 16:23
quelle

3 Antworten

7

Ich würde Ihnen empfehlen, Ihre Daten in einem "langen" Format zu speichern. Hier ist, wie ich das angehen würde:

%Vor%

Alle Werte beibehalten, wenn Verbindungen bestehen:

%Vor%

Nur einen Wert beibehalten, wenn es Bindungen gibt:

%Vor%

Wenn Sie wirklich einen "weiten" Datensatz haben möchten, wäre das grundlegende Konzept, gather und spread die Daten mit "tidyr":

%Vor%

Es ist jedoch unklar, welche weite Form Sie mit Verbindungen haben möchten.

    
A5C1D2H2I1M1N2O1R2T1 12.05.2015, 16:33
quelle
5

Sie können which.min und which.max verwenden, um den ersten Wert zu erhalten.

%Vor%

Um alle Werte zu erhalten, verwenden Sie z.B. Einfügen mit einem passenden Argument collapse .

%Vor%     
shadow 12.05.2015 16:27
quelle
3

Hier sind einige data.table Ansätze, die erste von @akrun geliehen:

%Vor%

Ich denke, das lange Format ist das beste, da es Ihnen erlaubt, mit minmax zu filtern, aber der Code ist gequält und ineffizient.

Hier sind einige weniger gute Wege:

%Vor%     
Frank 12.05.2015 17:18
quelle

Tags und Links