[R] simplify code for dummy coding of factors

David Winsemius dwinsemius at comcast.net
Wed Dec 31 01:01:31 CET 2014


On Dec 30, 2014, at 3:05 PM, Michael Friendly wrote:

> In a manuscript, I have the following code to illustrate dummy coding of two factors in a contingency table.
> 
> It works, but is surely obscured by the method I used, involving outer() to find equalities and 0+outer()
> to convert to numeric.  Can someone help simplify this code to be more comprehensible and give the
> *same* result? I'd prefer a solution that uses base R.
> 
> haireye <- margin.table(HairEyeColor, 1:2)
> 
> haireye.df <- as.data.frame(haireye)
> dummy.hair <-  0+outer(haireye.df$Hair, levels(haireye.df$Hair), `==`)
> colnames(dummy.hair)  <- paste0('h', 1:4)
> dummy.eye <-  0+outer(haireye.df$Eye, levels(haireye.df$Eye), `==`)
> colnames(dummy.eye)  <- paste0('e', 1:4)
> 
> haireye.df <- data.frame(haireye.df, dummy.hair, dummy.eye)
> haireye.df
> 
> > haireye.df
>    Hair   Eye Freq h1 h2 h3 h4 e1 e2 e3 e4
> 1  Black Brown   68  1  0  0  0  1  0  0  0
> 2  Brown Brown  119  0  1  0  0  1  0  0  0
> 3    Red Brown   26  0  0  1  0  1  0  0  0
> 4  Blond Brown    7  0  0  0  1  1  0  0  0
> 5  Black  Blue   20  1  0  0  0  0  1  0  0
> 6  Brown  Blue   84  0  1  0  0  0  1  0  0
> 7    Red  Blue   17  0  0  1  0  0  1  0  0
> 8  Blond  Blue   94  0  0  0  1  0  1  0  0
> 9  Black Hazel   15  1  0  0  0  0  0  1  0
> 10 Brown Hazel   54  0  1  0  0  0  0  1  0
> 11   Red Hazel   14  0  0  1  0  0  0  1  0
> 12 Blond Hazel   10  0  0  0  1  0  0  1  0
> 13 Black Green    5  1  0  0  0  0  0  0  1
> 14 Brown Green   29  0  1  0  0  0  0  0  1
> 15   Red Green   14  0  0  1  0  0  0  0  1
> 16 Blond Green   16  0  0  0  1  0  0  0  1

I think the world would be a better place if you illustrated model.matrix:

 haireye.mtx <- cbind( model.matrix(~0+Hair, as.data.frame(haireye) ),
 model.matrix(~0+Eye, as.data.frame(haireye) ) )
 colnames(haireye.mtx) <- gsub("[a-z]+", "", colnames(haireye.mtx)  )

> haireye.df2
   HB HB HR HB EB EB EH EG
1   1  0  0  0  1  0  0  0
2   0  1  0  0  1  0  0  0
3   0  0  1  0  1  0  0  0
4   0  0  0  1  1  0  0  0
5   1  0  0  0  0  1  0  0
6   0  1  0  0  0  1  0  0
7   0  0  1  0  0  1  0  0
8   0  0  0  1  0  1  0  0
9   1  0  0  0  0  0  1  0
10  0  1  0  0  0  0  1  0
11  0  0  1  0  0  0  1  0
12  0  0  0  1  0  0  1  0
13  1  0  0  0  0  0  0  1
14  0  1  0  0  0  0  0  1
15  0  0  1  0  0  0  0  1
16  0  0  0  1  0  0  0  1

-- 
David.

> >
> 
> -- 
> Michael Friendly     Email: friendly AT yorku DOT ca
> Professor, Psychology Dept. & Chair, Quantitative Methods
> York University      Voice: 416 736-2100 x66249 Fax: 416 736-5814
> 4700 Keele Street    Web:http://www.datavis.ca
> Toronto, ONT  M3J 1P3 CANADA
> 
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list