আর-এ বন্ধ করা শতকরা র‌্যাঙ্ক [বন্ধ]


18

আমি কীভাবে ডেটা ফ্রেমে নতুন ভেরিয়েবল যুক্ত করতে পারি যা ভেরিয়েবলগুলির মধ্যে একটির পারসেন্টাইল র‌্যাঙ্ক হবে? আমি সহজেই এক্সলে এটি করতে পারি, তবে আমি সত্যিই আর-তে এটি করতে চাই

ধন্যবাদ

উত্তর:


27

কাঁচা ডেটা মানগুলির একটি ভেক্টর দেওয়া, একটি সাধারণ ফাংশন এর মতো দেখতে পারে

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))

3
১. আপনার ফাংশনটি এক্সেলের percentrankকাজকে নকল করে না , যা ভাল (+1) যেহেতু পরেরটি "অদ্ভুত" ফলাফল দেয় (আমার তুলনা দেখুন )। ২. আমি ডেটা ফ্রেমের নাম রাখব না df, কারণ dfএটি একটি আর ফাংশন (এফ বিতরণের ঘনত্ব, দেখুন ?df)।
বার্ড ওয়েইস

1
@ বারেন্ড ধন্যবাদ (1) বিভিন্ন সাইকোমেট্রিক্স প্যাকেজে PR গণনা করার জন্য কিছু বিল্ট-ইন ফাংশন রয়েছে। আমি মনে করি CTTকিছুক্ষণ আগে আমি প্যাকেজটি থেকে এটি ধরলাম । আমি এক্সেলের বিপরীতে চেক করিনি কারণ আমার কাছে এটি ব্যবহার / নেই। সম্পর্কে (2) আমি সবসময় এই সম্পর্কে ভুলে যাব বলে মনে হচ্ছে! আসুন my.*(পার্ল ওয়ে) সাথে চলুন :-)
chl

@ সিএইচএল কেন truncপ্রয়োজনীয়? দেখে মনে হয় যে র‌্যাঙ্ক যাইহোক সর্বদা পূর্ণসংখ্যা ফেরত দেবে।
টাইলার রিঙ্কার

1
@ টাইলার নাপ যদি বন্ধনগুলি rank()থাকে তবে বাঁধা মানগুলির গড় (সিএফ। ties.method = c("average",...)) নেওয়ার ক্ষেত্রে খেলাপি হয় ।
chl

8

যদি আপনার আসল ডেটা.ফ্রেমকে কল করা হয় 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।


1 - (র‌্যাঙ্ক / আকার) আপনাকে এক্সেল পারসেন্টাইলেরঙ্ক হিসাবে সমান দেয়
ব্যবহারকারী 333


একজন বেনাম (চেষ্টা করা) সম্পাদক নিম্নলিখিত মন্তব্যটি যুক্ত করার চেষ্টা করেছিলেন: "সুন্দর ফাংশন তবে কখনও কখনও, দুর্ভাগ্যক্রমে, আরএলই ভেক্টর ফিরে আসতে পারে length < length(dfr$myvar)"।
গুং - মনিকা পুনরায়

1

উপস্থাপিত উত্তরের সাথে একটি সমস্যা হ'ল এটি যখন আপনার এনএ থাকবে তখন তা ঠিক মতো কাজ করবে না।

এই ক্ষেত্রে, আরেকটি সম্ভাবনা (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))))]
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.