অর্ডার () ফাংশন বোঝা


89

আমি order()ফাংশনটি কীভাবে কাজ করে তা বোঝার চেষ্টা করছি । আমি এই ছাপের মধ্যে ছিলাম যে এটি সূচকগুলির একটি ক্রম ফেরত পাঠিয়েছে, যা সাজানো হলে মূল ভেক্টরটিকে বাছাই করে।

এই ক্ষেত্রে,

> a <- c(45,50,10,96)
> order(a)
[1] 3 1 2 4

আমি আশা করি এই ফিরে আসবে c(2, 3, 1, 4) , যেহেতু তালিকাটি সাজানো হবে 10 45 50 96 96

এই ফাংশনের রিটার্ন মান বুঝতে কেউ আমাকে সহায়তা করতে পারে?

উত্তর:


101

এটি এটি ব্যাখ্যা বলে মনে হচ্ছে।

সংজ্ঞা orderযে a[order(a)]ক্রমবর্ধমান ক্রম হয়। এটি আপনার উদাহরণের সাথে কাজ করে, যেখানে সঠিক ক্রমটি চতুর্থ, দ্বিতীয়, প্রথম এবং তৃতীয় উপাদান।

আপনি সন্ধান করতে পারেন rank, যা উপাদানগুলির পদমর্যাদায় ফিরে আসে
R> a <- c(4.1, 3.2, 6.1, 3.1)
R> order(a)
[1] 4 2 1 3
R> rank(a)
[1] 3 2 4 1
তাই rankআপনাকে নম্বরগুলি কী ক্রমে থাকে তা orderআপনাকে জানায় কীভাবে সেগুলি আরোহণের ক্রমে পাবেন।

plot(a, rank(a)/length(a))সিডিএফ একটি গ্রাফ দেবে। কেন orderদরকারী তা দেখতে , চেষ্টা করুন plot(a, rank(a)/length(a),type="S") যা কোন জগাখিচুড়ি দেয়, কারণ ডেটা ক্রমবর্ধমান হয় না

আপনি যদি করেন
oo<-order(a)
plot(a[oo],rank(a[oo])/length(a),type="S")
বা কেবল
oo<-order(a)
plot(a[oo],(1:length(a))/length(a)),type="S")
আপনি সিডিএফের একটি লাইন গ্রাফ পান।

আমি বাজি ধরব আপনি র‌্যাঙ্কের কথা ভাবছেন।


8
আহ .. আমি এখন দেখছি। অর্ডার () সজ্জিত ক্রমে ভেক্টরের সূচকগুলি প্রদান করে। আশ্চর্য, অনেক অনেক ধন্যবাদ।
জেফশান্টজ

order(a, decreasing = T)এবং rank(a)একটি সমতুল্য উত্তর প্রদান করবে।
ওমর

অর্ডার নিয়ে আমার সমস্যা হচ্ছে a<-c(4,2,1,80,13)তারপরে order(a)হওয়া উচিত 3 4 5 1 2, তবে আশ্চর্যের সাথে আমি পাচ্ছি3 2 1 5 4
শোহম দেবনাথ

4
@ ডুফাইমো এখানে একটু সাহায্যের সত্যই প্রশংসা হবে। কখন rankএবং orderএকই?
শোহম দেবনাথ

আসলে, order(order(a))হিসাবে একই ফিরে আসবে rank(a) যদি কোন বন্ধন আছে। যদি থাকে তবে এটি একই হিসাবে ফিরে আসবে rank(a, ties.method="first")
জ্যাক

33

কোনও 1 ডি ভেক্টর বা একক কলামের ডেটা বাছাই করতে, কেবল বাছাই ফাংশনটি কল করুন এবং আপনার ক্রমটি পাস করুন।

অন্যদিকে, অর্ডার ফাংশনটি দ্বি- মাত্রিক ডেটা - বা অর্থ, ম্যাট্রিক্স বা ডেটা ফ্রেমে সংগৃহীত ডেটার একাধিক কলামগুলি সাজাতে প্রয়োজনীয়।

Stadium Home Week Qtr Away Off Def Result       Kicker Dist
751     Out  PHI   14   4  NYG PHI NYG   Good      D.Akers   50
491     Out   KC    9   1  OAK OAK  KC   Good S.Janikowski   32
702     Out  OAK   15   4  CLE CLE OAK   Good     P.Dawson   37
571     Out   NE    1   2  OAK OAK  NE Missed S.Janikowski   43
654     Out  NYG   11   2  PHI NYG PHI   Good      J.Feely   26
307     Out  DEN   14   2  BAL DEN BAL   Good       J.Elam   48
492     Out   KC   13   3  DEN  KC DEN   Good      L.Tynes   34
691     Out  NYJ   17   3  BUF NYJ BUF   Good     M.Nugent   25
164     Out  CHI   13   2   GB CHI  GB   Good      R.Gould   25
80      Out  BAL    1   2  IND IND BAL   Good M.Vanderjagt   20

২০০৮ এনএফএল মরসুমে মাঠের লক্ষ্যের চেষ্টার জন্য ডেটার একটি অংশ এখানে দেওয়া হয়েছে, আমি একটি ডেটাফ্রেমকে 'fg' বলেছি। মনে করুন যে এই 10 ডেটা পয়েন্টগুলি 2008 সালে চেষ্টা করা ক্ষেত্রের সমস্ত লক্ষ্য উপস্থাপন করে; আরও ধরা যাক আপনি সেই বছর সবচেয়ে দীর্ঘতম মাঠের লক্ষ্যটির চেষ্টা করেছেন, কে এটি লাথি মেরেছিল এবং এটি ভাল ছিল কি না তা জানতে চেয়েছিলেন; আপনি দ্বিতীয় দীর্ঘতম পাশাপাশি তৃতীয়-দীর্ঘতম ইত্যাদিও জানতে চান; এবং অবশেষে আপনি সংক্ষিপ্ততম ক্ষেত্রের লক্ষ্য চেষ্টা করতে চান।

ঠিক আছে, আপনি কেবল এটি করতে পারেন:

sort(fg$Dist, decreasing=T)

যা ফিরে আসে: 50 48 43 37 34 34 26 26 25 25 20

এটি সঠিক, তবে খুব দরকারী নয় - এটি আমাদের দীর্ঘতম ফিল্ড গোলের চেষ্টার দূরত্ব, দ্বিতীয়-দীর্ঘতম ... পাশাপাশি সংক্ষিপ্ততমও বলে দেয়; তবে, তবে আমরা কেবল এটিই জানি - উদাহরণস্বরূপ, আমরা চেষ্টা করতে পারি না যে প্রীতিটি সফল ছিল কিনা ইত্যাদি course অবশ্যই, আমাদের "ডিস্ট" কলামে পুরো ডেটাফ্রেমটি সাজানো দরকার (অন্যভাবে বলা হয়েছে, আমরা একক অ্যাট্রিবিউট জেলাতে সমস্ত ডাটা সারিগুলিকে সাজানোর জন্য চান যা দেখতে এইরকম হবে:

Stadium Home Week Qtr Away Off Def Result       Kicker Dist
751     Out  PHI   14   4  NYG PHI NYG   Good      D.Akers   50
307     Out  DEN   14   2  BAL DEN BAL   Good       J.Elam   48
571     Out   NE    1   2  OAK OAK  NE Missed S.Janikowski   43
702     Out  OAK   15   4  CLE CLE OAK   Good     P.Dawson   37
492     Out   KC   13   3  DEN  KC DEN   Good      L.Tynes   34
491     Out   KC    9   1  OAK OAK  KC   Good S.Janikowski   32
654     Out  NYG   11   2  PHI NYG PHI   Good      J.Feely   26
691     Out  NYJ   17   3  BUF NYJ BUF   Good     M.Nugent   25
164     Out  CHI   13   2   GB CHI  GB   Good      R.Gould   25
80      Out  BAL    1   2  IND IND BAL   Good M.Vanderjagt   20

এই কি অর্ডার আছে। এটি দ্বি-মাত্রিক ডেটার জন্য 'বাছাই'; অন্য উপায়ে বলুন, এটি সারি সংখ্যার সমন্বয়ে 1D পূর্ণসংখ্যার সূচক প্রদান করে যা সেই ভেক্টর অনুসারে সারিগুলি বাছাই করে, ডিস্ট্রিমে কলামে আপনাকে একটি সঠিক সারি-ভিত্তিক বাছাই দেয়

এখানে কিভাবে এটা কাজ করে. উপরে, ডিস্ট কলামটি বাছাই করতে বাছাই করা হত; জেলা কলামে পুরো ডেটাফ্রেমকে বাছাই করতে, আমরা 'অর্ডার' ঠিক একইভাবে ব্যবহার করি যেমন 'সাজানো' উপরে ব্যবহৃত হয় :

ndx = order(fg$Dist, decreasing=T)

(আমি সাধারণত অ্যারেটিকে 'অর্ডার' থেকে ভেরিয়েবল 'এনডিএক্স'-তে ফিরে আসে, যা 'সূচক' এর জন্য দাঁড়ায়, কারণ আমি এটি সাজানোর জন্য সূচক অ্যারে হিসাবে ব্যবহার করতে যাচ্ছি))

এটি ছিল পদক্ষেপ 1, এখানে পদক্ষেপ 2:

'এনডিএক্স', যা 'সাজান' দ্বারা ফিরে আসে তা ডেটাফ্রেম, 'fg' পুনরায় অর্ডার করতে একটি সূচক অ্যারে হিসাবে ব্যবহৃত হয় :

fg_sorted = fg[ndx,]

fg_sort হ'ল উপরের তত্ক্ষণাত পুনরায় অর্ডার করা ডেটাফ্রেম।

সংক্ষেপে, 'বাছাই' একটি সূচি অ্যারে তৈরি করতে ব্যবহৃত হয় (যা আপনি যে কলামটির বাছাই করতে চান তার ক্রম ক্রম নির্দিষ্ট করে), যা ডেটাফ্রেম (বা ম্যাট্রিক্স) পুনরায় অর্ডার করতে সূচি অ্যারে হিসাবে ব্যবহৃত হয়।


4
-1: অর্ডার ভেক্টরের পক্ষে বেশ ভাল ধারণা তৈরি করে। আদেশের মূল সম্পত্তি - যে একটি [আদেশ (ক)] বাছাই করা হয়েছে - পরিষ্কারভাবে বলা হয়নি।
জ্যোতির্ময় ভট্টাচার্য

4
ভুল আপনাকে আবার দেখতে হবে - উপরের কোডের দুটি (ধূসর-পটভূমি) লাইনে 'বেসিকাল সম্পত্তি' অবশ্যই খুব স্পষ্টভাবে দেখানো হয়েছে। যেহেতু ডাব্লু / 'অর্ডার' বাছাই করা দুটি পৃথক ক্রিয়াকলাপ, আমি কোডের দুটি লাইন ব্যবহার করে এটি দেখিয়েছি - একটি সূচক ভেক্টর তৈরি করে এবং দ্বিতীয় সূত্রটি সাজানো সম্পাদনের জন্য সেই সূচকটি ব্যবহার করে। ওপি কেবল একটি ফলাফল নয়, তার ব্যাখ্যা চেয়েছিল এবং আমি তাকে একটি উত্তর দিয়েছি, তার প্রমাণ হিসাবে তিনি আমার উত্তরটি নির্বাচন করেছেন এবং উপরে একটি ধন্যবাদ লিখেছিলেন "ধন্যবাদ [এম] একেবারে সঠিক ধারণা"। এমনকি চূড়ান্ত ফলাফলটিকে "fg_sort" নামক একটি ভেরিয়েবলের সাথে আবদ্ধ করেছিলাম।
ডগ

24

(আমি ভেবেছিলাম @ ডগ দ্বারা পোস্ট করা ভাল সামগ্রীর সংক্ষিপ্তকরণ এবং @ ডুফাইমো দ্বারা লিঙ্কিত ভাল বিটিডব্লিউ; বিটিডাব্লু।) -র সাথে 1 + বিটিডাব্লু সংযুক্ত করা সহজ হতে পারে)

? আদেশ আপনাকে জানায় যে মূল ভেক্টরের কোন উপাদানটিকে প্রথমে, দ্বিতীয়, ইত্যাদি স্থাপন করা উচিত, যাতে মূল ভেক্টরটিকে বাছাই করা যায়, তবে ? র‌্যাঙ্কটি আপনাকে জানায় যে কোন উপাদানটির সর্বনিম্ন, দ্বিতীয় সর্বনিম্ন ইত্যাদি রয়েছে, মান। উদাহরণ স্বরূপ:

> a <- c(45, 50, 10, 96)
> order(a)  
[1] 3 1 2 4  
> rank(a)  
[1] 2 3 1 4  

সুতরাং বলা order(a)হচ্ছে, 'আপনি সাজানোর সময় তৃতীয় উপাদানটি প্রথমে রাখুন ...', যেখানে বলা rank(a)হচ্ছে, 'প্রথম উপাদানটি দ্বিতীয় সর্বনিম্ন ...'। (নোট করুন যে তারা উভয়ই একমত যে কোন উপাদানটি সর্বনিম্ন, ইত্যাদি ইত্যাদি; তারা কেবল ভিন্নভাবে তথ্য উপস্থাপন করে)) সুতরাং আমরা দেখতে পাই যে আমরা order()বাছাই করতে ব্যবহার করতে পারি, তবে আমরা rank()সেভাবে ব্যবহার করতে পারি না :

> a[order(a)]  
[1] 10 45 50 96  
> sort(a)  
[1] 10 45 50 96  
> a[rank(a)]  
[1] 50 10 45 96  

সাধারণভাবে, ভেক্টরটি ইতিমধ্যে বাছাই করা না হলে order()সমান হবে না rank():

> b <- sort(a)  
> order(b)==rank(b)  
[1] TRUE TRUE TRUE TRUE  

এছাড়াও, যেহেতু order()(প্রয়োজনীয়ভাবে) ডেটাগুলি র‌্যাঙ্কের ওপেন করা হয়, আপনি তথ্যকে প্রভাবিত না করে সেগুলি রচনা করতে পারতেন, তবে অন্য উপায়ে জিব্রিশ তৈরি করে:

> order(rank(a))==order(a)  
[1] TRUE TRUE TRUE TRUE  
> rank(order(a))==rank(a)  
[1] FALSE FALSE FALSE  TRUE  

4
orderএবং rankআসলে একে অপরের বিপরীতমুখী (কমপক্ষে যতক্ষণ মানগুলি aঅনন্য থাকে) are যদি আপনি কল্পনা করেন যে প্রত্যেকটির মান (/ 1 লেবেল) ('1', '2', '3', '4') রয়েছে তবে তার মানগুলি order(a)আপনাকে rank(a)প্রতিটি লেবেলে কোন অবস্থানটি দেখাবে তা বোঝায় (উদাহরণস্বরূপ প্রথম স্তরের মান) order(a)(3) আপনাকে বলে যে '1' এর তৃতীয় অবস্থানে ঘটে rank(a)এবং বিপরীতে (উদাহরণস্বরূপ rank(a)(3) এর 2 য় মান আপনাকে জানায় যে '2' এর 3 য় স্থানে ঘটে order(a)) They তারা বিপরীত অনুমান: rank(order(a))= order(rank(a))=1 2 3 4
Glen_b

"? আদেশ আপনাকে জানায় যে মূল ভেক্টরের কোন উপাদানটিকে প্রথমে দ্বিতীয়, দ্বিতীয় ইত্যাদি স্থাপন করা দরকার, যাতে মূল ভেক্টরটিকে বাছাই করা যায়, তবে? র‌্যাঙ্কটি আপনাকে জানায় যে কোন উপাদানটির সর্বনিম্ন, দ্বিতীয় সর্বনিম্ন, ইত্যাদি রয়েছে।" সেখানে যে কাউকে বলতে হয়েছে। অবশেষে। ধন্যবাদ!!
আলেকসান্দ্রহ

সংক্ষিপ্তভাবে ব্যাখ্যা করা হয়েছে .. কোনটির প্রয়োজন "? আদেশ আপনাকে জানায় যে মূল ভেক্টরটির কোন উপাদানটি প্রথমে, দ্বিতীয়, ইত্যাদি স্থাপন করা উচিত, যাতে মূল ভেক্টরটি বাছাই করা যায়, যখন? র‌্যাঙ্ক আপনাকে বলে যে কোন উপাদানটির সর্বনিম্ন, দ্বিতীয় নিম্নতম আছে? , ইত্যাদি, মান। "
sHiBuKaLiDhAsA

9

কোডটির এই সামান্য অংশটি চালানো আমাকে অর্ডার ক্রিয়াকলাপটি বুঝতে দেয়

x <- c(3, 22, 5, 1, 77)

cbind(
  index=1:length(x),
  rank=rank(x),
  x, 
  order=order(x), 
  sort=sort(x)
)

     index rank  x order sort
[1,]     1    2  3     4    1
[2,]     2    4 22     1    3
[3,]     3    3  5     3    5
[4,]     4    1  1     2   22
[5,]     5    5 77     5   77

তথ্যসূত্র: http://r.789695.n4.nabble.com/I-don-t-:30:30-t--ord-function-td4664384.html


4
ফলাফলটি ইনপুটটির সাথে মেলে না। আপনি একটি ভিন্ন ব্যবহার করেছেন আবশ্যক xমধ্যে cbind()
সমৃদ্ধ স্ক্রিভেন

উপরোক্ত মন্তব্যের সাথে সংশোধন করা হয়েছে। আশা করি এটি সাহায্য করবে :)
অ্যাডবেসিন

2

এটি আপনাকে এক পর্যায়ে সহায়তা করতে পারে।

a <- c(45,50,10,96)
a[order(a)]

আপনি যা পান তা হ'ল

[1] 10 45 50 96

আমি যে কোডটি লিখেছি তা নির্দেশ করে যে আপনি "এ" এর সম্পূর্ণ উপসেট হিসাবে "a" চান এবং আপনি এটি সর্বনিম্ন থেকে সর্বোচ্চ মানের অর্ডার করতে চান want


2

সহজ কথায়, order()ক্রমবর্ধমান মাত্রার উপাদানগুলির অবস্থান দেয়।

উদাহরণস্বরূপ, order(c(10,20,30))দেব 1,2,3 এবং order(c(30,20,10))দেব 3,2,1


0

এগুলি একই রকম তবে একই নয়

set.seed(0)
x<-matrix(rnorm(10),1)

# one can compute from the other
rank(x)  == col(x)%*%diag(length(x))[order(x),]
order(x) == col(x)%*%diag(length(x))[rank(x),]
# rank can be used to sort
sort(x) == x%*%diag(length(x))[rank(x),]

র‌্যাঙ্কটি হ'ল আদেশের বিপরীত ক্রমান্বয়ে: all(x==x[order(x)][rank(x)])সর্বদা সত্য। কিছু ক্রিয়াকলাপগুলি তাদের নিজস্ব বিপরীত, তবে বেশিরভাগটি হয় না। অর্ডার () এর বাইরে বেরিয়ে যাওয়ার ক্রমকে সাজানোর বিপরীতটি হল র‌্যাঙ্ক ()। এটি ব্যাখ্যা করে যে তারা কেন কখনও কখনও একই হয় এবং otherimes হয় না।
নিক ন্যাসুফিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.