Antworten:
Bei einem gegebenen Vektor von Rohdatenwerten könnte eine einfache Funktion so aussehen
perc.rank <- function(x, xo) length(x[x <= xo])/length(x)*100
Wo x0
ist der Wert, für den wir den Perzentil-Rang wollen, gegeben durch den Vektor x
, wie in R-Bloggern vorgeschlagen .
Es kann jedoch leicht als vektorisiert werden
perc.rank <- function(x) trunc(rank(x))/length(x)
Dies hat den Vorteil, dass nicht jeder Wert übergeben werden muss. Hier ist ein Anwendungsbeispiel:
my.df <- data.frame(x=rnorm(200))
my.df <- within(my.df, xr <- perc.rank(x))
CTT
Paket geholt. Ich habe nicht gegen Excel geprüft, weil ich es nicht habe / benutze. Über (2) Ich scheine das immer zu vergessen! Lass uns mit my.*
(Perl Weg) gehen :-)
trunc
nötig? Es scheint, dass rank immer eine ganze Zahl zurückgibt.
rank()
standardmäßig der Durchschnitt der Gleichheitswerte gebildet (vgl. ties.method = c("average",...)
).
Wenn Ihr ursprünglicher data.frame aufgerufen wird dfr
und die Variable von Interesse aufgerufen wird myvar
, können Sie sie dfr$myrank<-rank(dfr$myvar)
für normale Ränge oder dfr$myrank<-rank(dfr$myvar)/length(myvar)
für Perzentil-Ränge verwenden.
Naja. Wenn Sie es wirklich in Excel wollen (vielleicht nicht die einfachste Lösung, aber ich hatte ein bisschen Spaß beim Verwenden neuer (für mich) Funktionen und beim Vermeiden von Schleifen):
percentilerank<-function(x){
rx<-rle(sort(x))
smaller<-cumsum(c(0, rx$lengths))[seq(length(rx$lengths))]
larger<-rev(cumsum(c(0, rev(rx$lengths))))[-1]
rxpr<-smaller/(smaller+larger)
rxpr[match(x, rx$values)]
}
So, jetzt können Sie verwenden dfr$myrank<-percentilerank(dfr$myvar)
HTH.
length < length(dfr$myvar)
" zurückgeben.
Ein Problem mit der vorgestellten Antwort ist, dass es nicht richtig funktioniert, wenn Sie NAs haben.
In diesem Fall ist eine andere Möglichkeit (inspiriert von der Funktion von chl ♦):
perc.rank <- function(x) trunc(rank(x,na.last = NA))/sum(!is.na(x))
quant <- function (x, p.ile) {
x[which.min(x = abs(perc.rank(x-(p.ile/100))))]
}
Hier ist x der Vektor der Werte und p.ile ist das Rang-Perzentil. 2,5 Perzentile nach Rang (beliebig) coef.mat können berechnet werden durch:
quant(coef.mat[,3], 2.5)
[1] 0.00025
oder als einzelne Funktion:
quant <- function (x, p.ile) {
perc.rank <- trunc(rank(x,na.last = NA))/sum(!is.na(x))
x = na.omit(x)
x[which.min(x = abs(perc.rank(x-(p.ile/100))))]
}
percentrank
, was gut ist (+1), da letztere "seltsame" Ergebnisse liefert (siehe meinen Vergleich ). 2. Ich würde den Datenrahmen nicht benennendf
, dadf
es sich um eine R-Funktion handelt (Dichte der F-Verteilung, siehe?df
).