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 <[email protected]> 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 <[email protected]>
> To: r-help <[email protected]>
> 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]]
>
> ______________________________________________
> [email protected] 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]]
______________________________________________
[email protected] 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.