[R] configure ddply() to avoid reordering of '.variables'

arun smartpink111 at yahoo.com
Mon May 27 16:06:58 CEST 2013


May be this helps 

levels(x$Species)
#[1] "setosa"     "versicolor" "virginica" 
x$Species<- factor(x$Species,levels=unique(x$Species))
xa <- ddply(x, .(Species), function(x)
 {data.frame(Sepal.Length=x$Sepal.Length, mean.adj=(x$Sepal.Length -
 mean(x$Sepal.Length)))})
 head(xa)
#    Species Sepal.Length mean.adj
#1 virginica          6.3   -0.288
#2 virginica          5.8   -0.788
#3 virginica          7.1    0.512
#4 virginica          6.3   -0.288
#5 virginica          6.5   -0.088
#6 virginica          7.6    1.012


A.K.


----- Original Message -----
From: Liviu Andronic <landronimirc at gmail.com>
To: "r-help at r-project.org Help" <r-help at r-project.org>
Cc: 
Sent: Monday, May 27, 2013 4:47 AM
Subject: [R] configure ddply() to avoid reordering of '.variables'

Hello,
I'm using ddply() in plyr and I notice that it has the habit of
re-ordering the levels of the '.variables' by which the splitting is
done. I'm concerned about correctly retrieving the original ordering.

Consider:
require(plyr)
x <- iris[ order(iris$Species, decreasing=T), ]
head(x)
#    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
#101          6.3         3.3          6.0         2.5 virginica
#102          5.8         2.7          5.1         1.9 virginica
#103          7.1         3.0          5.9         2.1 virginica
#104          6.3         2.9          5.6         1.8 virginica
#105          6.5         3.0          5.8         2.2 virginica
#106          7.6         3.0          6.6         2.1 virginica
xa <- ddply(x, .(Species), function(x)
{data.frame(Sepal.Length=x$Sepal.Length, mean.adj=(x$Sepal.Length -
mean(x$Sepal.Length)))})
#  |==============================================================================================|
100%
##notice how the ordering of Species is different
##from that in the input data frame
head(xa)
#  Species Sepal.Length mean.adj
#1  setosa          5.1    0.094
#2  setosa          4.9   -0.106
#3  setosa          4.7   -0.306
#4  setosa          4.6   -0.406
#5  setosa          5.0   -0.006
#6  setosa          5.4    0.394
all.equal(xa$Species, x$Species)
#[1] "100 string mismatches"
all.equal(xa[ order(xa$Species, decreasing=T), ]$Species, x$Species)
#[1] TRUE
all.equal(xa$Sepal.Length, x$Sepal.Length)
#[1] "Mean relative difference: 0.2785"
all.equal(xa[ order(xa$Species, decreasing=T), ]$Sepal.Length, x$Sepal.Length)
#[1] TRUE

In my real data, should I be concerned that simply reordering by the
'.variables' variable wouldn't necessarily restore the original
ordering as in the input data frame? Is it possible to instruct
ddply() to avoid re-ordering the supplied '.variables' variable?

Regards,
Liviu


-- 
Do you know how to read?
http://www.alienetworks.com/srtest.cfm
http://goodies.xfce.org/projects/applications/xfce4-dict#speed-reader
Do you know how to write?
http://garbl.home.comcast.net/~garbl/stylemanual/e.htm#e-mail

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list