আপনার পছন্দ
order
থেকে base
arrange
থেকে dplyr
setorder
এবং setorderv
থেকেdata.table
arrange
থেকে plyr
sort
থেকে taRifx
orderBy
থেকে doBy
sortData
থেকে Deducer
কোনও সময় নির্ভরতা না থাকলে আপনার বেশিরভাগ সময় সমাধান dplyr
বা data.table
সমাধানগুলি ব্যবহার করা উচিত , এক্ষেত্রে ব্যবহার base::order
।
আমি সম্প্রতি CRAN প্যাকেজে सॉर्ट.ডাটা.ফ্রেম যুক্ত করেছি, এখানে আলোচিত হিসাবে এটি শ্রেণি সামঞ্জস্যপূর্ণ:
সারণি.ডাটা.ফ্রেমের জন্য জেনেরিক / পদ্ধতির ধারাবাহিকতা তৈরি করার সর্বোত্তম উপায়?
অতএব, ডেটা.ফ্রেমে ডিডি দেওয়া, আপনি নিম্নলিখিত হিসাবে বাছাই করতে পারেন:
dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"),
levels = c("Low", "Med", "Hi"), ordered = TRUE),
x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
z = c(1, 1, 1, 2))
library(taRifx)
sort(dd, f= ~ -z + b )
আপনি যদি এই ফাংশনের মূল লেখকদের একজন হন তবে দয়া করে আমার সাথে যোগাযোগ করুন। জনসাধারণের ডোমেনাইনেস হিসাবে আলোচনা এখানে: http://chat.stackoverflow.com/transcript/message/1094290#1094290
উপরের থ্রেডে হ্যাডলি যেভাবে নির্দেশ করেছেন সেভাবে আপনি arrange()
ফাংশনটি ব্যবহার করতে পারেন plyr
:
library(plyr)
arrange(dd,desc(z),b)
বেঞ্চমার্কস: নোট করুন যে আমি একটি নতুন আর সেশনে প্রতিটি প্যাকেজ লোড করেছি যেহেতু প্রচুর দ্বন্দ্ব ছিল। বিশেষ করে ডোবাই প্যাকেজ লোড করার ফলে sort
"নিম্নলিখিত বিষয়গুলি (গুলি) 'x (অবস্থান 17)' থেকে মুখোশযুক্ত: বি, এক্স, ওয়াই, জেড", এবং sort.data.frame
কেভিন রাইট বা ট্যারিফ্যাক্স প্যাকেজ থেকে ডিডুসার প্যাকেজ ওভাররাইটগুলি লোড করে ।
#Load each time
dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"),
levels = c("Low", "Med", "Hi"), ordered = TRUE),
x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
z = c(1, 1, 1, 2))
library(microbenchmark)
# Reload R between benchmarks
microbenchmark(dd[with(dd, order(-z, b)), ] ,
dd[order(-dd$z, dd$b),],
times=1000
)
মধ্যযুগীয় সময়:
dd[with(dd, order(-z, b)), ]
778
dd[order(-dd$z, dd$b),]
788
library(taRifx)
microbenchmark(sort(dd, f= ~-z+b ),times=1000)
মধ্যযুগীয় সময়: 1,567
library(plyr)
microbenchmark(arrange(dd,desc(z),b),times=1000)
মধ্যযুগীয় সময়: 862
library(doBy)
microbenchmark(orderBy(~-z+b, data=dd),times=1000)
মধ্যযুগীয় সময়: 1,694
নোট করুন যে প্যাকেজটি লোড করতে ডোবাই বেশ ভাল সময় নেয়।
library(Deducer)
microbenchmark(sortData(dd,c("z","b"),increasing= c(FALSE,TRUE)),times=1000)
ডিডুসার লোড করা যায়নি। জেজিআর কনসোল প্রয়োজন।
esort <- function(x, sortvar, ...) {
attach(x)
x <- x[with(x,order(sortvar,...)),]
return(x)
detach(x)
}
microbenchmark(esort(dd, -z, b),times=1000)
সংযুক্তি / বিচ্ছিন্নতার কারণে মাইক্রোবেঞ্চমার্কের সাথে সামঞ্জস্যপূর্ণ বলে মনে হয় না।
m <- microbenchmark(
arrange(dd,desc(z),b),
sort(dd, f= ~-z+b ),
dd[with(dd, order(-z, b)), ] ,
dd[order(-dd$z, dd$b),],
times=1000
)
uq <- function(x) { fivenum(x)[4]}
lq <- function(x) { fivenum(x)[2]}
y_min <- 0 # min(by(m$time,m$expr,lq))
y_max <- max(by(m$time,m$expr,uq)) * 1.05
p <- ggplot(m,aes(x=expr,y=time)) + coord_cartesian(ylim = c( y_min , y_max ))
p + stat_summary(fun.y=median,fun.ymin = lq, fun.ymax = uq, aes(fill=expr))
(রেখাগুলি নিম্ন চতুর্থাংশ থেকে উপরের চতুর্দিকে বিস্তৃত হয়, বিন্দুটি মাঝারি হয়)
এই ফলাফল দেওয়া এবং সরলতা বনাম গতি ওজনের, আমি নড়া দিতে হবে চাই arrange
মধ্যে plyr
প্যাকেজ । এটিতে একটি সরল বাক্য গঠন রয়েছে এবং তবুও প্রায় তাদের দ্রবীভূত যন্ত্রে বেস আর কমান্ডগুলির মতো দ্রুত গতি রয়েছে। সাধারণত উজ্জ্বল হ্যাডলি উইকহ্যাম কাজ। এটির সাথে আমার একমাত্র গ্রিপ এটি মানক আর নামকরণটি ভেঙে দেয় যেখানে বাছাই করা বস্তুগুলি ডেকে sort(object)
আনে, তবে আমি বুঝতে পারি যে উপরে লিঙ্কিত প্রশ্নে আলোচিত ইস্যুগুলির কারণে হ্যাডলি কেন সেভাবে এটি করেছিল।