J'ai récemment ajouté de tri.les données.cadre d'un CRAN paquet, rendant classe compatible comme expliqué ici:
Meilleure façon de créer des génériques, de méthode, de cohérence pour le tri.les données.cadre?
Par conséquent, compte tenu des données.cadre de dd, vous pouvez trier comme suit:
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 )
Si vous êtes l'un des auteurs de cette fonction, veuillez me contacter. Débat public domaininess est ici: http://chat.stackoverflow.com/transcript/message/1094290#1094290
Vous pouvez également utiliser l' arrange()
fonction Hadley souligné dans le fil au-dessus:
library(plyr)
arrange(dd,desc(z),b)
Critères d'évaluation: la Note que j'ai chargé chaque paquet dans un nouveau R de session car il y avait beaucoup de conflits. En particulier, le chargement de la doBy paquet causes esort de retour "de L'objet suivant(s) sont masqués à partir de 'x (poste 17)': b, x, y, z", et le chargement de la Deducer paquet remplace le tri.les données.cadre de Kevin Wright ou le taRifx paquet.
#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
)
La médiane de temps:
dd [(dd, de l'ordre de (z, b)), ] 778
dd[commande(-jj$z, jj$b)] 788
library(taRifx)
microbenchmark(sort(dd, f= ~-z+b ),times=1000)
Temps médian: 1,567
library(plyr)
microbenchmark(arrange(dd,desc(z),b),times=1000)
Temps médian: 862
library(doBy)
microbenchmark(orderBy(~-z+b, data=dd),times=1000)
Temps médian: de 1 694
Notez que doBy prend un bon peu de temps pour charger le package.
library(Deducer)
microbenchmark(sortData(dd,c("z","b"),increasing= c(FALSE,TRUE)),times=1000)
Ne pouvais pas faire Deducer charge. Besoins JGR de la console.
esort <- function(x, sortvar, ...) {
attach(x)
x <- x[with(x,order(sortvar,...)),]
return(x)
detach(x)
}
microbenchmark(esort(dd, -z, b),times=1000)
Ne semble pas être compatible avec microbenchmark en raison de l'attacher/détacher.
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))
(lignes s'étendent à partir du premier quartile supérieur quartile, la dot est la médiane)
Compte tenu de ces résultats et de pesage simplicité vs vitesse, je dois donner le clin d'œil à l' arrange
dans la plyr
package. Il a une syntaxe simple et pourtant il est presque aussi rapide que la base de R des commandes avec leurs alambiqué machinations. Généralement brillant Hadley Wickham travail. Mon seul reproche c'est qu'il se casse la norme R nomenclature où le tri des objets appelés par sort(object)
, mais je comprends pourquoi Hadley fait de cette façon en raison de problèmes abordés dans la question ci-dessus.