Yanıtlar:
Ham veri değerlerinin bir vektörü verildiğinde, basit bir işlev
perc.rank <- function(x, xo) length(x[x <= xo])/length(x)*100
nerede x0
vektör verilen biz yüzdelik sıralaması istediğiniz değerdir x
üzerinde önerildiği gibi R-blogcular .
Ancak,
perc.rank <- function(x) trunc(rank(x))/length(x)
her bir değeri geçmek zorunda kalmama avantajı vardır İşte bir kullanım örneği:
my.df <- data.frame(x=rnorm(200))
my.df <- within(my.df, xr <- perc.rank(x))
CTT
bir süre önce paketten aldım . Excel'e karşı kontrol etmedim, çünkü kullanmadım / kullanmıyorum. Hakkında (2) Bunu hep unutmuşum gibi görünüyor! my.*
(Perl yolu) :-) ile gidelim
trunc
gereklidir? Görünüşe göre rütbe her zaman bir tamsayı döndürür.
rank()
varsayılan olarak bağlı değerlerin ortalamasını almak (cf. ties.method = c("average",...)
).
Orijinal data.frame'iniz çağrılır dfr
ve ilgilenilen değişken çağrılırsa myvar
, dfr$myrank<-rank(dfr$myvar)
normal rütbeler veya dfr$myrank<-rank(dfr$myvar)/length(myvar)
yüzdelik rütbeler için kullanabilirsiniz.
Oh iyi. Gerçekten Excel yolu istiyorsanız (en basit çözüm olmayabilir, ancak yeni (bana) işlevlerini kullanarak ve döngülerden kaçınarak biraz eğlendim):
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)]
}
şimdi kullanabilirsiniz dfr$myrank<-percentilerank(dfr$myvar)
HTH.
length < length(dfr$myvar)
".
Sunulan cevapla ilgili bir problem, NA'larınız olduğunda düzgün çalışmayacağıdır.
Bu durumda, başka bir olasılık (chl ♦ fonksiyonundan esinlenilmiştir):
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))))]
}
Burada x, değerlerin vektörüdür ve pile, yüzdelik değerdir. 2.5 rasgele (keyfi) katsayı matına göre hesaplanabilir:
quant(coef.mat[,3], 2.5)
[1] 0.00025
veya tek bir işlev olarak:
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
-fonksiyonunu taklit etmiyor , ki bu iyi (+1), çünkü ikincisi "garip" sonuçlar veriyor ( karşılaştırmamı görün ). 2. Veri çerçevesini adlandırmamdf
, çünküdf
bir R fonksiyonudur (F dağılımının yoğunluğu, bkz.?df
).