Wow, Arun I think I really like this solution. It allows me to create
irregular groupings and is very parsimonious.
Thank you very much!
Dimitri
On Fri, Dec 7, 2012 at 8:09 AM, arun <smartpink...@yahoo.com> wrote:

> HI,
>
> In your method2 and method3, you are using the groupings data.  If that is
> the case, is it possible for you to use ?merge() or ?join() from
> library(plyr)
>  join(mydata,groupings,by=c("sex","age"),type="inner")
>  #  sex age mygroup
> #1    m   1       1
> #2    m   2       2
> #3    m   3       3
> #4    m   4       4
> #5    f   1       5
> #6    f   2       6
> #7    f   3       7
> #8    f   4       8
> #9    m   1       1
> #10   m   2       2
> #11   m   3       3
> #12   m   4       4
> #13   f   1       5
> #14   f   2       6
> #15   f   3       7
> #16   f   4       8
> A.K.
>
>
>
> ----- Original Message -----
> From: Dimitri Liakhovitski <dimitri.liakhovit...@gmail.com>
> To: r-help <r-help@r-project.org>
> Cc:
> Sent: Friday, December 7, 2012 7:27 AM
> Subject: [R] Assigning cases to groupings based on the values of several
> variables
>
> Dear R-ers,
>
> my task is to simple: to assign cases to desired groupings based on the
> combined values on 2 variables. I can think of 3 methods of doing it.
> Method 1 seems to me pretty r-like, but it requires a lot of lines of code
> - onerous.
> Method 2 is a loop, so not very good - as it loops through all rows of
> mydata.
> Method 3 is a loop but loops through fewer lines, so it seems to me more
> efficient.
> Can you please tell me:
> 1. Which of my methods is more efficient?
> 2. Is there maybe an even more efficient r-like way of doing it?
> Imagine - "mydata" is actually a very tall data frame.
> Thanks a lot!
> Dimitri
>
> ### My Data:
>
> mydata<-data.frame(sex=rep(c(rep("m",4),rep("f",4)),2),age=rep(c(1:4,1:4),2))
> (mydata)
>
> ### My desired assignments (in column "mygroup")
>
> groupings<-data.frame(sex=c(rep("m",4),rep("f",4)),age=c(1:4,1:4),mygroup=1:8)
> (groupings)
>
> # No, I don't need a solution where the last column of "groupings" is
> stacked twice and bound to "mydata"
>
> # Method 1 of assigning to groups - requires a lot of lines of code:
> mydata$mygroup.m1<-NA
> mydata[(mydata$sex %in% "m")&(mydata$age %in% 1),"mygroup.m1"]<-1
> mydata[(mydata$sex %in% "m")&(mydata$age %in% 2),"mygroup.m1"]<-2
> mydata[(mydata$sex %in% "m")&(mydata$age %in% 3),"mygroup.m1"]<-3
> mydata[(mydata$sex %in% "m")&(mydata$age %in% 4),"mygroup.m1"]<-4
> mydata[(mydata$sex %in% "f")&(mydata$age %in% 1),"mygroup.m1"]<-5
> mydata[(mydata$sex %in% "f")&(mydata$age %in% 2),"mygroup.m1"]<-6
> mydata[(mydata$sex %in% "f")&(mydata$age %in% 3),"mygroup.m1"]<-7
> mydata[(mydata$sex %in% "f")&(mydata$age %in% 4),"mygroup.m1"]<-8
> (mydata)
>
> # Method 2 of assigning to groups - very "loopy":
> mydata$mygroup.m2<-NA
> for(i in 1:nrow(mydata)){  # i<-1
>   mysex<-mydata[i,"sex"]
>   myage<-mydata[i,"age"]
>   mydata[i,"mygroup.m2"]<-groupings[(groupings$sex %in%
> mysex)&(groupings$age %in% myage),"mygroup"]
> }
> (mydata)
>
> # Method 3 of assigning to groups - also "loopy", but less than Method 2:
> mydata$mygroup.m3<-NA
> for(i in 1:nrow(groupings)){  # i<-1
>   mysex<-groupings[i,"sex"]
>   myage<-groupings[i,"age"]
>   mydata[(mydata$sex %in% mysex)&(mydata$age %in%
> myage),"mygroup.m3"]<-groupings[i,"mygroup"]
> }
> (mydata)
>
> --
> Dimitri Liakhovitski
> gfk.com <http://marketfusionanalytics.com/>
>
>     [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@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<http://www.r-project.org/posting-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>
>


-- 
Dimitri Liakhovitski
gfk.com <http://marketfusionanalytics.com/>

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to