### simple and easy dummy coding in R (with NAs)
### see also http://stackoverflow.com/questions/5616210/model-matrix-with-na-action-null#31949950

## define data frame
p <- 1:3  # variable levels
data <- data.frame(a=sample(p, 20, replace=TRUE))
data$a[19] <- NA  # insert NA
print(data)
##     a
## 1   3
## 2   3
## 3   3
## 4   3
## 5   2
## 6   1
## 7   1
## 8   3
## 9   3
## 10  1
## 11  1
## 12  1
## 13  2
## 14  3
## 15  2
## 16  3
## 17  1
## 18  3
## 19 NA
## 20  2
## variable must be a factor
data$a <- as.factor(data$a)

## one-liner for dummy coding
## name p variables in df, otherwise data frames are nested
data[, paste0("a.", p)] <- model.matrix(~0+a, model.frame(~0+a, data, na.action="na.pass")) 
print(data)
##       a a.1 a.2 a.3
## 1     3   0   0   1
## 2     3   0   0   1
## 3     3   0   0   1
## 4     3   0   0   1
## 5     2   0   1   0
## 6     1   1   0   0
## 7     1   1   0   0
## 8     3   0   0   1
## 9     3   0   0   1
## 10    1   1   0   0
## 11    1   1   0   0
## 12    1   1   0   0
## 13    2   0   1   0
## 14    3   0   0   1
## 15    2   0   1   0
## 16    3   0   0   1
## 17    1   1   0   0
## 18    3   0   0   1
## 19 <NA>  NA  NA  NA
## 20    2   0   1   0