Yet Another Blog in Statistical Computing

I can calculate the motion of heavenly bodies but not the madness of people. -Isaac Newton

Conversion between Factor and Dummies in R

data(iris)
str(iris)
# OUTPUT: 
# 'data.frame': 150 obs. of  5 variables:
#  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
#  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
#  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
#  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
#  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

### CONVERT THE FACTOR TO DUMMIES ### 
library(caret)
dummies <- predict(dummyVars(~ Species, data = iris), newdata = iris)
head(dummies, n = 3)
# OUTPUT:
#   Species.setosa Species.versicolor Species.virginica
# 1              1                  0                 0
# 2              1                  0                 0
# 3              1                  0                 0

### CONVERT DUMMIES TO THE FACTOR ###
header <- unlist(strsplit(colnames(dummies), '[.]'))[2 * (1:ncol(dummies))]
species <- factor(dummies %*% 1:ncol(dummies), labels = header)
str(species)
# OUTPUT:
#  Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

### COMPARE THE ORIGINAL AND THE CALCULATED FACTORS ###
library(compare)
all.equal(species, iris$Species)
# OUTPUT:
# [1] TRUE
Advertisements

Written by statcompute

May 18, 2013 at 10:25 pm

Posted in S+/R

%d bloggers like this: