I have a categorical variable in a dataframe similar to the following... cat 1 1 3 2 4 I need to convert it to 4 dichotemous variables for each observations like... cat1 cat2 cat3 cat4 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 Thanks in advance! Shane
Converting a categorical variable to multiple dichotemous variables
5 messages · andrija djurovic, Dr. Pablo E. Verde, Shane Phillips +1 more
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110412/efccfffa/attachment.pl>
Hi Shane, An alternative is: cat<-as.factor(c(1,1,3,2,4)) outer(cat, levels(cat), "==")+0 Cheers, Pablo ----- Original Message ----- From: "andrija djurovic" <djandrija at gmail.com> To: "Shane Phillips" <SPhillips at lexington1.net> Cc: <r-help at r-project.org> Sent: Tuesday, April 12, 2011 2:32 PM Subject: Re: [R] Converting a categorical variable to multiple dichotemousvariables
hi: here is one solution: cat<-as.factor(c(1,1,3,2,4)) model.matrix(~cat-1,cat) cbind(cat,model.matrix(~cat-1,cat)) Andrija On Tue, Apr 12, 2011 at 2:17 PM, Shane Phillips <SPhillips at lexington1.net>wrote:
I have a categorical variable in a dataframe similar to the following... cat 1 1 3 2 4 I need to convert it to 4 dichotemous variables for each observations like... cat1 cat2 cat3 cat4 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 Thanks in advance! Shane
______________________________________________ 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<http://www.r-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.
[[alternative HTML version deleted]]
______________________________________________ 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.
Here is my original script. subject=1:1000 treat=rbinom(1*1000,1,.13) gender=rbinom(1*1000,1,.5) eth=runif(1*1000, min=1, max=4) cogat=rnorm(1*1000, 100, 16) map=rnorm(1*1000, 200, 9) growth=0 simtest=data.frame (subject=subject, treat=treat, gender=gender, eth=round(eth,digits=0), cogat=round(cogat,digits=0),map=round(map,digits=0),growth) simtest<-transform(simtest, growth=rnorm(1000,m=ifelse(treat==0,0.1,0.5),s=0.03)) simtest The categorical variable I'm looking at is "eth." I want to change it to a factor. The code you gave works great by itself, but I can't apply it to this program. Sorry! I'm really new to this. Thanks for your help! Shane -----Original Message----- From: Dr. Pablo E. Verde [mailto:PabloEmilio.Verde at uni-duesseldorf.de] Sent: Tuesday, April 12, 2011 8:53 AM To: andrija djurovic; Shane Phillips Cc: r-help at r-project.org Subject: Re: [R] Converting a categorical variable to multiple dichotemousvariables Hi Shane, An alternative is: cat<-as.factor(c(1,1,3,2,4)) outer(cat, levels(cat), "==")+0 Cheers, Pablo ----- Original Message ----- From: "andrija djurovic" <djandrija at gmail.com> To: "Shane Phillips" <SPhillips at lexington1.net> Cc: <r-help at r-project.org> Sent: Tuesday, April 12, 2011 2:32 PM Subject: Re: [R] Converting a categorical variable to multiple dichotemousvariables
hi: here is one solution: cat<-as.factor(c(1,1,3,2,4)) model.matrix(~cat-1,cat) cbind(cat,model.matrix(~cat-1,cat)) Andrija On Tue, Apr 12, 2011 at 2:17 PM, Shane Phillips <SPhillips at lexington1.net>wrote:
I have a categorical variable in a dataframe similar to the following... cat 1 1 3 2 4 I need to convert it to 4 dichotemous variables for each observations like... cat1 cat2 cat3 cat4 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 Thanks in advance! Shane
______________________________________________ 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<http://www.r-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.
[[alternative HTML version deleted]]
______________________________________________ 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.
Shane, Does this work? # Your simulated data subject=1:1000 treat=rbinom(1*1000,1,.13) gender=rbinom(1*1000,1,.5) eth=runif(1*1000, min=1, max=4) cogat=rnorm(1*1000, 100, 16) map=rnorm(1*1000, 200, 9) growth=0 simtest=data.frame (subject=subject, treat=treat, gender=gender, eth=round(eth,digits=0), cogat=round(cogat,digits=0),map=round(map,digits=0),growth) simtest<-transform(simtest, growth=rnorm(1000,m=ifelse(treat==0,0.1,0.5),s=0.03)) head(simtest) # From Pablo above, but with unique() instead of levels(), since your eth is numeric, not a factor simtest.dichotomous <- outer(simtest$eth, unique(simtest$eth), "==") + 0 # Combine simtest.combined <- cbind(simtest, simtest.dichotomous) head(simtest.combined) Jeremy Jeremy Hetzel Boston University