| derivedVariable {mosaic} | R Documentation | 
Create new variables from logicals
Description
Utility functions for creating new variables from logicals describing the levels
Usage
derivedVariable(
  ...,
  .ordered = FALSE,
  .method = c("unique", "first", "last"),
  .debug = c("default", "always", "never"),
  .sort = c("given", "alpha"),
  .default = NULL,
  .asFactor = FALSE
)
derivedFactor(..., .asFactor = TRUE)
Arguments
... | 
 named logical "rules" defining the levels.  | 
.ordered | 
 a logical indicating whether the resulting factored should be ordered
Ignored if   | 
.method | 
 one of   | 
.debug | 
 one of   | 
.sort | 
 One of   | 
.default | 
 character vector of length 1 giving name of default level or
  | 
.asFactor | 
 A logical indicating whether the returned value should be a factor.  | 
Details
Each logical "rule" corresponds to a level in the resulting variable.
If .default is defined, an implicit rule is added that is TRUE
whenever all other rules are FALSE.
When there are multiple TRUE rules for a slot, the first or last such is used
or an error is generated, depending on the value of method.
derivedVariable is designed to be used with transform() or
dplyr::mutate() to add new
variables to a data frame.  derivedFactor() is the same but that the
default value for .asFactor is TRUE.  See the examples.
Examples
Kf <- mutate(KidsFeet, biggerfoot2 = derivedFactor(
                   dom = biggerfoot == domhand,
                   nondom = biggerfoot != domhand)
                   )
tally( ~ biggerfoot + biggerfoot2, data = Kf)
tally( ~ biggerfoot + domhand, data = Kf)
# Three equivalent ways to define a new variable
# Method 1: explicitly define all levels
modHELP <- mutate(HELPrct, drink_status = derivedFactor( 
  abstinent = i1 == 0,
  moderate = (i1>0 & i1<=1 & i2<=3 & sex=='female') |
     (i1>0 & i1<=2 & i2<=4 & sex=='male'),
  highrisk = ((i1>1 | i2>3) & sex=='female') | 
      ((i1>2 | i2>4) & sex=='male'),
  .ordered = TRUE)
)
tally( ~ drink_status, data = modHELP)
# Method 2: Use .default for last level
modHELP <- mutate(HELPrct, drink_status = derivedFactor( 
  abstinent = i1 == 0,
  moderate = (i1<=1 & i2<=3 & sex=='female') |
     (i1<=2 & i2<=4 & sex=='male'),
  .ordered = TRUE,
  .method = "first",
  .default = "highrisk")
)
tally( ~ drink_status, data = modHELP)
# Method 3: use TRUE to catch any fall through slots
modHELP <- mutate(HELPrct, drink_status = derivedFactor( 
  abstinent = i1 == 0,
  moderate = (i1<=1 & i2<=3 & sex=='female') |
     (i1<=2 & i2<=4 & sex=='male'),
  highrisk=TRUE,
  .ordered = TRUE,
  .method = "first"
  )
)
tally( ~ drink_status, data = modHELP)
is.factor(modHELP$drink_status)
modHELP <- mutate(HELPrct, drink_status = derivedVariable( 
  abstinent = i1 == 0,
  moderate = (i1<=1 & i2<=3 & sex=='female') |
     (i1<=2 & i2<=4 & sex=='male'),
  highrisk=TRUE,
  .ordered = TRUE,
  .method = "first"
  )
)
is.factor(modHELP$drink_status)