[R] Creating Dummy Variables with if else phrase

Peter Dalgaard BSA p.dalgaard at biostat.ku.dk
Fri May 2 22:08:44 CEST 2003


langensk at fas.harvard.edu writes:

> Dear All,
> 
> I want to do 52 state dummy variables. In order to make it easier for me, I 
> thought of using the below commands. (x is the vector with state variables, 
> matrix will correspond to the dummy variables)
> 
> 
> x <- c(1,2,NA,4)
> matrix <- matrix(0,nrow=4,ncol=4)
> 
> for (i in 1:4) {
> if (is.real(x[i])) {
> matrix[i,x[i]] <- 1 } else {
> matrix[i,] <- rep(NA,4)
> }
> }
> 
> This gives me the following matrix:
> 
> 1  0  0  0
> 0  1  0  0
> 0  0  0  0
> 0  0  0  1
> 
> But I want it to look as follows:
> 
> 1   0  0  0
> 0   1  0  0
> NA NA NA NA
> 0   0  0  1
> 
> 
> I want the forth row to be NA, but it is unchanged, i.e., 0. The second "else" 
> phrase does not seem to work, and I cannot see what is wrong.
> 
> I would be very grateful for your help.

is.real is true for all elements in x. You may have intended
!is.na(x[i]).

However, there are simpler ways, e.g.

0+outer(x,1:4,"==")
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    1    0    0
[3,]   NA   NA   NA   NA
[4,]    0    0    0    1

or simply use model formulas and code x as a factor.

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)             FAX: (+45) 35327907



More information about the R-help mailing list