回答:
生データ値のベクトルが与えられると、単純な関数は次のようになります
perc.rank <- function(x, xo) length(x[x <= xo])/length(x)*100
ここx0
で、R-bloggersでx
提案されているように、vectorが与えられた場合のパーセンタイルランクが必要な値です。
ただし、次のように簡単にベクトル化できます。
perc.rank <- function(x) trunc(rank(x))/length(x)
各値を渡す必要がないという利点があります。そのため、使用例を次に示します。
my.df <- data.frame(x=rnorm(200))
my.df <- within(my.df, xr <- perc.rank(x))
CTT
は少し前にパッケージからこれを入手したと思います。持っていない/使用していないため、Excelをチェックしませんでした。(2)について私はこれをいつも忘れているようです!my.*
(Perl way)で行こう:-)
trunc
必要なのですか?とにかく、ランクは常に整数を返すようです。
rank()
デフォルトでは同順位の値の平均を取得します(を参照ties.method = c("average",...)
)。
元のdata.frameが呼び出されdfr
、目的の変数が呼び出されるmyvar
場合dfr$myrank<-rank(dfr$myvar)
、通常のランクまたはdfr$myrank<-rank(dfr$myvar)/length(myvar)
パーセンタイルランクに使用できます。
しかたがない。あなたが本当にExcelの方法が必要な場合(最も簡単な解決策ではないかもしれませんが、新しい(私にとって)関数を使用してループを回避するいくつかの楽しみがありました):
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)]
}
だから今、あなたは使用することができます dfr$myrank<-percentilerank(dfr$myvar)
HTH。
length < length(dfr$myvar)
。
提示された回答の問題は、NAがある場合、適切に機能しないことです。
この場合、別の可能性(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))))]
}
ここで、xは値のベクトルであり、p.ileはランクごとのパーセンタイルです。(任意の)coef.matのランクによる2.5パーセンタイルは、次のように計算できます。
quant(coef.mat[,3], 2.5)
[1] 0.00025
または単一の機能として:
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
-functionを模倣していません。これは良い(+1 )です。後者は "奇妙な"結果を与えるからです(私の比較をご覧ください)。2. R関数(F分布の密度、を参照)df
であるため、データフレームに名前を付けません。df
?df