Skip to content

Creating Dummy Variables with if else phrase

3 messages · langensk@fas.harvard.edu, Achim Zeileis, Peter Dalgaard

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

Regards, Sophie
#
On Friday 02 May 2003 21:41, langensk at fas.harvard.edu wrote:

            
I don't really understand why you want to create a matrix that way, 
but if you want to do it the way described above
  is.real(x[i])
seems to be the wrong function (because x is a real vector in the 
example above). If you want to test for NA you should use
  !is.na(x[i])
instead.
Z
#
langensk at fas.harvard.edu writes:
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.