[R] Basic Dummy Variable Creation

Douglas Bates bates at stat.wisc.edu
Fri Sep 5 18:12:27 CEST 2003

```"Francisco J. Bido" <bido at mac.com> writes:

> Hi There,
>
> While looking through the mailing list archive, I did not come across
> a simple minded example regarding the creation of dummy variables.
> The Gauss language provides the command "y = dummydn(x,v,p)" for
> creating dummy variables.
>
> Here:
>
> x = Nx1 vector of data to be broken up into dummy variables.
> v = Kx1 vector specifying the K-1 breakpoints
> p = positive integer in the range [1,K], specifying which column
> should be dropped in the matrix of dummy variables.
>
> y = Nx(K-1) matrix containing the K-1 dummy variables.
>
> My recent mailing list archive inquiry has led me to examine R's
> "model.matrix" but it has so many options that I'm not seeing the
> forest because of the trees.  Is that really the easiest way? or is
> there something similar to the dummydn command described above?
>
>
> To provide a concrete scenario, please consider the following.  Using
> the above notation, say, I had:
>
>
> x <- c(1:10)      #data to be broken up into dummy variables
> v <- c(3,5,7)     #breakpoints
> p =  1                #drop this column to avoid dummy variable trap
>
> How can I get a matrix "y" that has the associated dummy variables for
> columns?

Don't.

Consider why you want the dummy variables.  You probably want to use
them in the specification of a statistical model and R's model
specification language automatically expands a factor variable into a
set of contrasts.

Try

data(PlantGrowth)
fm = lm(weight ~ group, data = PlantGrowth)
summary(fm)

and you will see that the `group' factor has been expanded to two of
the three indicator variables (if you use the default setting for
contrasts - other possibilities exist).

You can check explicitly how the model matrix is created with

model.matrix(fm)

The model specification facilities in R are much more flexible than
most other languages and you almost never need to create indicators
explicitly.

```