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