Senin seçimlerin
order
itibaren base
arrange
itibaren dplyr
setorder
ve setorderv
gelendata.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 dplyr
veya 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, plyr
Hadley'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.frame
Kevin 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 arrange
yılında plyr
paketin . 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.