Skip to content

Converting a categorical variable to multiple dichotemous variables

5 messages · andrija djurovic, Dr. Pablo E. Verde, Shane Phillips +1 more

#
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
#
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
#
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
#
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