Skip to content

Sorting a data frame by specifying a vector

6 messages · LCOG1, Bert Gunter, arun +2 more

#
Hello all, 
   I cannot seem to figure out this seemingly simple procedure.  

I want to sort a data frame by a specified character vector.

So for :

df.. <- data.frame(Season=rep(c("Summer","Fall","Winter","Spring"),4),Obs=
runif(length(rep(c("Summer","Fall","Winter","Spring"),4))))

I want to sort the data frame by the seasons but in the order I specify
since alphapetically would not put the season in sequential order

I tried the following and a few other things but no dice.  It looks like I
will have to convert to factors.  Any thoughts?  Thanks

df.. <-
df..[sort(as.factor(Df..$Season,levels=c("Summer","Fall","Winter","Spring"))),]

Josh



--
View this message in context: http://r.789695.n4.nabble.com/Sorting-a-data-frame-by-specifying-a-vector-tp4645867.html
Sent from the R help mailing list archive at Nabble.com.
#
?order
df[order(yourcolumn, ]

-- Bert
On Thu, Oct 11, 2012 at 10:08 AM, LCOG1 <jroll at lcog.org> wrote:

  
    
#
Hi,
In your dataset, it seems like it is already ordered in the way you wanted to.
df.. <- data.frame(Season=rep(c("Summer","Fall","Winter","Spring"),4),Obs=
runif(length(rep(c("Summer","Fall","Winter","Spring"),4))))

#Suppose the order you want is:

?vec2<-c("Summer","Winter","Fall","Spring")
df1<-df..[match(df..$Season,vec2),]
?row.names(df1)<-1:nrow(df1)
?df1
#?? Season?????? Obs
#1? Summer 0.2141001
#2? Winter 0.9318599
#3??? Fall 0.6722337
#4? Spring 0.1927715
#5? Summer 0.2141001
#6? Winter 0.9318599
#7??? Fall 0.6722337
#8? Spring 0.1927715
#9? Summer 0.2141001
#10 Winter 0.9318599
#11?? Fall 0.6722337
#12 Spring 0.1927715
#13 Summer 0.2141001
#14 Winter 0.9318599
#15?? Fall 0.6722337
#16 Spring 0.1927715


A.K.

----- Original Message -----
From: LCOG1 <jroll at lcog.org>
To: r-help at r-project.org
Cc: 
Sent: Thursday, October 11, 2012 1:08 PM
Subject: [R] Sorting a data frame by specifying a vector

Hello all, 
?  I cannot seem to figure out this seemingly simple procedure.? 

I want to sort a data frame by a specified character vector.

So for :

df.. <- data.frame(Season=rep(c("Summer","Fall","Winter","Spring"),4),Obs=
runif(length(rep(c("Summer","Fall","Winter","Spring"),4))))

I want to sort the data frame by the seasons but in the order I specify
since alphapetically would not put the season in sequential order

I tried the following and a few other things but no dice.? It looks like I
will have to convert to factors.? Any thoughts?? Thanks

df.. <-
df..[sort(as.factor(Df..$Season,levels=c("Summer","Fall","Winter","Spring"))),]

Josh



--
View this message in context: http://r.789695.n4.nabble.com/Sorting-a-data-frame-by-specifying-a-vector-tp4645867.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
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.
#
Sorry if I wasn't clear but the result I am looking for is as follows
#?? Season?????? Obs
#1? Summer 0.2141001
#5? Summer 0.2141001
#9? Summer 0.2141001
#13 Summer 0.2141001
#3??? Fall 0.6722337
#7??? Fall 0.6722337
#11?? Fall 0.6722337
#15?? Fall 0.6722337
#2? Winter 0.9318599
#6? Winter 0.9318599
#10 Winter 0.9318599
#14 Winter 0.9318599
#4? Spring 0.1927715
#8? Spring 0.1927715
#12 Spring 0.1927715
#16 Spring 0.1927715

The process you describe does not get me there

Any other recommendations?

-----Original Message-----
From: arun [mailto:smartpink111 at yahoo.com] 
Sent: Thursday, October 11, 2012 10:33 AM
To: ROLL Josh F
Cc: R help
Subject: Re: [R] Sorting a data frame by specifying a vector

Hi,
In your dataset, it seems like it is already ordered in the way you wanted to.
df.. <- data.frame(Season=rep(c("Summer","Fall","Winter","Spring"),4),Obs=
runif(length(rep(c("Summer","Fall","Winter","Spring"),4))))

#Suppose the order you want is:

?vec2<-c("Summer","Winter","Fall","Spring")
df1<-df..[match(df..$Season,vec2),]
?row.names(df1)<-1:nrow(df1)
?df1
#?? Season?????? Obs
#1? Summer 0.2141001
#2? Winter 0.9318599
#3??? Fall 0.6722337
#4? Spring 0.1927715
#5? Summer 0.2141001
#6? Winter 0.9318599
#7??? Fall 0.6722337
#8? Spring 0.1927715
#9? Summer 0.2141001
#10 Winter 0.9318599
#11?? Fall 0.6722337
#12 Spring 0.1927715
#13 Summer 0.2141001
#14 Winter 0.9318599
#15?? Fall 0.6722337
#16 Spring 0.1927715


A.K.

----- Original Message -----
From: LCOG1 <jroll at lcog.org>
To: r-help at r-project.org
Cc: 
Sent: Thursday, October 11, 2012 1:08 PM
Subject: [R] Sorting a data frame by specifying a vector

Hello all,
?  I cannot seem to figure out this seemingly simple procedure.? 

I want to sort a data frame by a specified character vector.

So for :

df.. <- data.frame(Season=rep(c("Summer","Fall","Winter","Spring"),4),Obs=
runif(length(rep(c("Summer","Fall","Winter","Spring"),4))))

I want to sort the data frame by the seasons but in the order I specify since alphapetically would not put the season in sequential order

I tried the following and a few other things but no dice.? It looks like I will have to convert to factors.? Any thoughts?? Thanks

df.. <-
df..[sort(as.factor(Df..$Season,levels=c("Summer","Fall","Winter","Spring"))),]

Josh



--
View this message in context: http://r.789695.n4.nabble.com/Sorting-a-data-frame-by-specifying-a-vector-tp4645867.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
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.
#
HI,
In this case, specifying the factor levels would be easier.
Try this:
set.seed(1)
df <- data.frame(Season=rep(c("Summer","Fall","Winter","Spring"),4),Obs=
runif(length(rep(c("Summer","Fall","Winter","Spring"),4))))
df1<-within(df,{Season<-factor(Season,levels=c("Summer","Fall","Winter","Spring"))})
library(plyr)
df2<-ddply(df1,.(Season),function(x) x)
df2
#?? Season??????? Obs
#1? Summer 0.26550866
#2? Summer 0.20168193
#3? Summer 0.62911404
#4? Summer 0.68702285
#5??? Fall 0.37212390
#6??? Fall 0.89838968
#7??? Fall 0.06178627
#8??? Fall 0.38410372
#9? Winter 0.57285336
#10 Winter 0.94467527
#11 Winter 0.20597457
#12 Winter 0.76984142
#13 Spring 0.90820779
#14 Spring 0.66079779
#15 Spring 0.17655675
#16 Spring 0.49769924


Just curious, in your reply, the Obs column has only 4 values.? Do you want to get the means???


A.K.



----- Original Message -----
From: ROLL Josh F <JRoll at Lcog.org>
To: 'arun' <smartpink111 at yahoo.com>
Cc: R help <r-help at r-project.org>
Sent: Thursday, October 11, 2012 1:42 PM
Subject: RE: [R] Sorting a data frame by specifying a vector

Sorry if I wasn't clear but the result I am looking for is as follows
#?? Season?????? Obs
#1? Summer 0.2141001
#5? Summer 0.2141001
#9? Summer 0.2141001
#13 Summer 0.2141001
#3??? Fall 0.6722337
#7??? Fall 0.6722337
#11?? Fall 0.6722337
#15?? Fall 0.6722337
#2? Winter 0.9318599
#6? Winter 0.9318599
#10 Winter 0.9318599
#14 Winter 0.9318599
#4? Spring 0.1927715
#8? Spring 0.1927715
#12 Spring 0.1927715
#16 Spring 0.1927715

The process you describe does not get me there

Any other recommendations?

-----Original Message-----
From: arun [mailto:smartpink111 at yahoo.com] 
Sent: Thursday, October 11, 2012 10:33 AM
To: ROLL Josh F
Cc: R help
Subject: Re: [R] Sorting a data frame by specifying a vector

Hi,
In your dataset, it seems like it is already ordered in the way you wanted to.
df.. <- data.frame(Season=rep(c("Summer","Fall","Winter","Spring"),4),Obs=
runif(length(rep(c("Summer","Fall","Winter","Spring"),4))))

#Suppose the order you want is:

?vec2<-c("Summer","Winter","Fall","Spring")
df1<-df..[match(df..$Season,vec2),]
?row.names(df1)<-1:nrow(df1)
?df1
#?? Season?????? Obs
#1? Summer 0.2141001
#2? Winter 0.9318599
#3??? Fall 0.6722337
#4? Spring 0.1927715
#5? Summer 0.2141001
#6? Winter 0.9318599
#7??? Fall 0.6722337
#8? Spring 0.1927715
#9? Summer 0.2141001
#10 Winter 0.9318599
#11?? Fall 0.6722337
#12 Spring 0.1927715
#13 Summer 0.2141001
#14 Winter 0.9318599
#15?? Fall 0.6722337
#16 Spring 0.1927715


A.K.

----- Original Message -----
From: LCOG1 <jroll at lcog.org>
To: r-help at r-project.org
Cc: 
Sent: Thursday, October 11, 2012 1:08 PM
Subject: [R] Sorting a data frame by specifying a vector

Hello all,
?? I cannot seem to figure out this seemingly simple procedure.? 

I want to sort a data frame by a specified character vector.

So for :

df.. <- data.frame(Season=rep(c("Summer","Fall","Winter","Spring"),4),Obs=
runif(length(rep(c("Summer","Fall","Winter","Spring"),4))))

I want to sort the data frame by the seasons but in the order I specify since alphapetically would not put the season in sequential order

I tried the following and a few other things but no dice.? It looks like I will have to convert to factors.? Any thoughts?? Thanks

df.. <-
df..[sort(as.factor(Df..$Season,levels=c("Summer","Fall","Winter","Spring"))),]

Josh



--
View this message in context: http://r.789695.n4.nabble.com/Sorting-a-data-frame-by-specifying-a-vector-tp4645867.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
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.
#
I'm pretty sure you were already given the answer: order() in
conjunction with a factor with the level in an order you specify.


mydf$Season <- factor(mydf$Season, levels=c("Summer","Fall","Winter","Spring"))

mydf[order(mydf$Season),]

Thanks for making sure to include the context in your replies.

Sarah
On Thu, Oct 11, 2012 at 1:42 PM, ROLL Josh F <JRoll at lcog.org> wrote: