উত্তর:
কাঁচা ডেটা মানগুলির একটি ভেক্টর দেওয়া, একটি সাধারণ ফাংশন এর মতো দেখতে পারে
perc.rank <- function(x, xo) length(x[x <= xo])/length(x)*100
আর-ব্লগারদের পরামর্শ অনুসারে, x0
ভেক্টরকে দেওয়া x
হিসাবে আমরা যেখানে পারসেন্টাইল র্যাঙ্ক চাই তার মানটি কোথায় ?
তবে এটি সহজেই ভেক্টরাইজড হতে পারে
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
কিছুক্ষণ আগে আমি প্যাকেজটি থেকে এটি ধরলাম । আমি এক্সেলের বিপরীতে চেক করিনি কারণ আমার কাছে এটি ব্যবহার / নেই। সম্পর্কে (2) আমি সবসময় এই সম্পর্কে ভুলে যাব বলে মনে হচ্ছে! আসুন my.*
(পার্ল ওয়ে) সাথে চলুন :-)
trunc
প্রয়োজনীয়? দেখে মনে হয় যে র্যাঙ্ক যাইহোক সর্বদা পূর্ণসংখ্যা ফেরত দেবে।
rank()
থাকে তবে বাঁধা মানগুলির গড় (সিএফ। ties.method = c("average",...)
) নেওয়ার ক্ষেত্রে খেলাপি হয় ।
যদি আপনার আসল ডেটা.ফ্রেমকে কল করা হয় dfr
এবং আগ্রহের পরিবর্তনশীল বলা হয় myvar
, আপনি dfr$myrank<-rank(dfr$myvar)
সাধারণ র্যাঙ্কের জন্য ব্যবহার করতে পারেন , বাdfr$myrank<-rank(dfr$myvar)/length(myvar)
জন্য পারসেন্টাইল র্যাঙ্কের জন্য ।
আচ্ছা ভালো. আপনি যদি সত্যিই এটি एक्सेल উপায় চান (তবে সহজ সমাধান নাও হতে পারে তবে আমি নতুন (আমার কাছে) ফাংশনগুলি ব্যবহার করে এবং লুপগুলি এড়িয়ে কিছুটা মজা করেছি):
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)
"।
উপস্থাপিত উত্তরের সাথে একটি সমস্যা হ'ল এটি যখন আপনার এনএ থাকবে তখন তা ঠিক মতো কাজ করবে না।
এই ক্ষেত্রে, আরেকটি সম্ভাবনা (chl from থেকে ফাংশন দ্বারা অনুপ্রাণিত) হ'ল:
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 হল মানগুলির ভেক্টর, এবং পি.ইল হ'ল রেঙ্ক অনুসারে পার্সেন্টাইল। (স্বেচ্ছাসেবী) 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
কাজকে নকল করে না , যা ভাল (+1) যেহেতু পরেরটি "অদ্ভুত" ফলাফল দেয় (আমার তুলনা দেখুন )। ২. আমি ডেটা ফ্রেমের নাম রাখব নাdf
, কারণdf
এটি একটি আর ফাংশন (এফ বিতরণের ঘনত্ব, দেখুন?df
)।