Funktion für Median ähnlich wie "which.max" und "which.min" / Extrahieren von Medianzeilen aus einem data.frame

8

Ich muss gelegentlich bestimmte Zeilen aus einem data.frame basierend auf Werten aus einer der Variablen extrahieren. R hat eingebaute Funktionen für Maximum ( which.max() ) und Minimum ( which.min() ), die es mir erlauben, diese Zeilen einfach zu extrahieren.

Gibt es ein Äquivalent für Median? Oder ist meine beste Wette, nur meine eigene Funktion zu schreiben?

Hier ist ein Beispiel data.frame und wie würde ich which.max() und which.min() verwenden:

%Vor%

Da es in diesem speziellen Beispiel eine gerade Anzahl von Beobachtungen gibt, müssten zwei Zeilen zurückgegeben werden, in diesem Fall die Zeilen 2 und 10.

Aktualisieren

Es scheint, dass es dafür keine eingebaute Funktion gibt. Daher habe ich die Antwort von Sacha als Ausgangspunkt verwendet und diese Funktion geschrieben:

%Vor%

Ich kann es wie folgt verwenden:

%Vor%

Gibt es Vorschläge, dies zu verbessern?

    
A5C1D2H2I1M1N2O1R2T1 21.04.2012, 05:30
quelle

4 Antworten

15

Während Sachas Lösung ziemlich allgemein ist, sind der Median (oder andere Quantile) Ordnungsstatistiken, so dass Sie die entsprechenden Indizes von order (x) (anstelle von sort (x) für die Quantilwerte) berechnen können.

Betrachtet man quantile , könnten die Typen 1 oder 3 verwendet werden, alle anderen führen in bestimmten Fällen zu (gewichteten) Durchschnittswerten von zwei Werten.

Ich wählte Typ 3, und ein bisschen Kopie & amp; Einfügen von quantile führt zu:

%Vor%

Ein kleiner Test:

%Vor%

Hier ist Ihr Beispiel:

%Vor%     
cbeleites 21.04.2012, 10:14
quelle
7

Ich denke nur:

%Vor%

Aber sei vorsichtig, denn der Median braucht den Mittelwert zweier Zahlen, wenn es keine einzige mittlere Zahl gibt. Z.B. median(1:4) gibt 2.5 an, das keinem der Elemente entspricht.

Bearbeiten

Hier ist eine Funktion, die Ihnen entweder das Element des Medians oder die erste Übereinstimmung mit dem Mittelwert des Medians gibt, ähnlich wie which.min() Ihnen das erste Element gibt, das nur dem Minimum entspricht:

%Vor%

Zum Beispiel:

%Vor%     
Sacha Epskamp 21.04.2012 05:48
quelle
2

Ich habe eine umfassendere Funktion geschrieben, die meinen Bedürfnissen dient:

%Vor%

Einige Beispielverwendung:

%Vor%     
A5C1D2H2I1M1N2O1R2T1 21.04.2012 09:23
quelle
2

Angenommen, der Vektor, von dem Sie den Median erhalten möchten, ist x .

Die Funktion which.min(x[x>=median(x)]) würde den Median geben wenn length(x)=2*n+1 oder der größere der beiden mittleren Werte wenn length(x)=2*n . Sie können es geringfügig ändern, wenn Sie den kleineren der beiden mittleren Werte erhalten möchten.

    
Yimai 25.10.2015 09:39
quelle

Tags und Links