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:
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.
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?
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:
Ein kleiner Test:
%Vor%Hier ist Ihr Beispiel:
%Vor%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.
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:
Zum Beispiel:
%Vor%Ich habe eine umfassendere Funktion geschrieben, die meinen Bedürfnissen dient:
%Vor%Einige Beispielverwendung:
%Vor% 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.