ඔබේ තේරීම්
order
සිට base
arrange
සිට dplyr
setorder
සහ setorderv
සිටdata.table
arrange
සිට plyr
sort
සිට taRifx
orderBy
සිට doBy
sortData
සිට Deducer
යැපීම් නොමැති වීම වැදගත් නොවන්නේ නම්, බොහෝ විට ඔබ dplyr
හෝ data.table
විසඳුම් භාවිතා කළ යුතුය base::order
.
මම මෑතකදී CRAN පැකේජයකට sort.data.frame එකතු කළ අතර එය මෙහි සාකච්ඡා කර ඇති පරිදි පන්ති අනුකූල වේ:
sort.data.frame සඳහා සාමාන්ය / ක්රම අනුකූලතාවයක් ඇති කිරීමට හොඳම ක්රමය?
එබැවින්, data.frame dd අනුව, ඔබට පහත පරිදි වර්ග කළ හැකිය:
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)
මිණුම් සලකුණු: ගැටුම් රාශියක් ඇති බැවින් මම සෑම පැකේජයක්ම නව R සැසියකට පටවා ඇති බව සලකන්න. විශේෂයෙන් doBy පැකේජය පැටවීමේදී sort
"පහත දැක්වෙන වස්තුව (ය) 'x (ස්ථානය 17)' වලින් ආවරණය කර ඇත: b, x, y, z", සහ Deducer පැකේජය පැටවීම sort.data.frame
කෙවින් රයිට් හෝ taRifx පැකේජයෙන් නැවත ලියයි.
#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
පැකේජය පැටවීමට doBy හොඳ කාලයක් ගතවන බව සලකන්න.
library(Deducer)
microbenchmark(sortData(dd,c("z","b"),increasing= c(FALSE,TRUE)),times=1000)
අඩු කරන්නා පැටවීමට නොහැකි විය. JGR කොන්සෝලය අවශ්යයි.
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
පැකේජය . එය සරල වාක්ය ඛණ්ඩයක් ඇති අතර මූලික R විධානයන් මෙන් ඒවායේ කැටි ගැසුණු යන්ත්ර සමඟ වේගවත් වේ. සාමාන්යයෙන් දීප්තිමත් හැඩ්ලි වික්හැම් වැඩ. එය සමඟ මට ඇති එකම ශෝකය නම්, එය වර්ගීකරණ වස්තූන් කැඳවන සම්මත R නාමකරණය බිඳ දැමීමයි sort(object)
, නමුත් ඉහත සම්බන්ධිත ප්රශ්නයේ සාකච්ඡා කර ඇති ගැටළු හේතුවෙන් හැඩ්ලි එසේ කළේ මන්දැයි මට වැටහේ.