Senin seçimlerin
order itibaren base
arrange itibaren dplyr
setorderve setordervgelendata.table
arrange itibaren plyr
sort itibaren taRifx
orderBy itibaren doBy
sortData itibaren Deducer
Çoğunlukla bağımlılıkların olmaması önemli olmadığı sürece dplyrveya data.tableçözümlerini kullanmalısınız, bu durumda kullanın base::order.
Geçenlerde bir CRAN paketine sort.data.frame ekledim, burada tartışıldığı gibi sınıfı uyumlu hale
getirdim: sort.data.frame için genel / yöntem tutarlılığı oluşturmanın en iyi yolu?
Bu nedenle, data.frame dd değeri verildiğinde aşağıdaki gibi sıralayabilirsiniz:
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 )
Bu işlevin orijinal yazarlarından biriyseniz, lütfen benimle iletişime geçin. Herkese açık alanlarla ilgili tartışma burada: http://chat.stackoverflow.com/transcript/message/1094290#1094290
Bu arrange()işlevi, plyrHadley'in yukarıdaki iş parçacığında işaret ettiği gibi de kullanabilirsiniz :
library(plyr)
arrange(dd,desc(z),b)
Deneyler: Çok fazla çakışma olduğu için her paketi yeni bir R oturumuna yüklediğimi unutmayın. Özellikle doBy paketinin yüklenmesi sort"Aşağıdaki nesneler 'x (konum 17)' den maskelenir: b, x, y, z" ve Deducer paketinin yüklenmesi sort.data.frameKevin Wright veya taRifx paketinin üzerine yazılır .
#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
)
Ortalama süreler:
dd[with(dd, order(-z, b)), ] 778
dd[order(-dd$z, dd$b),] 788
library(taRifx)
microbenchmark(sort(dd, f= ~-z+b ),times=1000)
Ortalama süre: 1.567
library(plyr)
microbenchmark(arrange(dd,desc(z),b),times=1000)
Ortalama süre: 862
library(doBy)
microbenchmark(orderBy(~-z+b, data=dd),times=1000)
Ortalama süre: 1,694
DoBy'nin paketi yüklemek için biraz zaman aldığını unutmayın.
library(Deducer)
microbenchmark(sortData(dd,c("z","b"),increasing= c(FALSE,TRUE)),times=1000)
Deducer yüklenemedi. JGR konsolu gerekir.
esort <- function(x, sortvar, ...) {
attach(x)
x <- x[with(x,order(sortvar,...)),]
return(x)
detach(x)
}
microbenchmark(esort(dd, -z, b),times=1000)
Takma / çıkarma nedeniyle mikrobenç işaretiyle uyumlu görünmüyor.
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))

(çizgiler alt dörtte birlik kısımdan üst dörtte birlik bölgeye uzanır, nokta medyandır)
Bu sonuçları göz önüne alındığında ve basitlik vs hızını ağırlığında, ben selam vermem gerekir arrangeyılında plyrpaketin . Basit bir sözdizimine sahiptir ve kıvrımlı işlemleriyle temel R komutları kadar hızlıdır. Genellikle parlak Hadley Wickham çalışır. Benim tek yakınma, sıralama nesnelerinin çağrıldığı standart R nomenklatürünü kırması sort(object), ancak yukarıda bağlantılı soruda tartışılan sorunlar nedeniyle Hadley'nin neden bu şekilde yaptığını anlıyorum.