Learn R Programming

mosaic (version 0.8-18)

derivedFactor: Create factors from logicals

Description

A utility function for creating new factors from logicals describing the levels

Usage

derivedFactor(..., .ordered = FALSE, .method = c("unique", "first", "last"),
  .debug = c("default", "always", "never"), .sort = c("given", "alpha"),
  .default = NULL)

Arguments

...
named logical "rules" defining the levels of the factor.
.ordered
a logical indicating whether the resulting factored should be ordered
.method
one of "unique", "first", and "last". If "unique", exactly one rule must be TRUE for each position. If "first", the first TRUE rule defines the level. If
.debug
one of "default", "always", and "never", indicating whehter debugging information should be printed. If "default", debugging information is printed only when multiple rules give conflicting defi
.sort
One of "given" (the default) or "alpha" or a vector of integers the same length as the number of levels indicating the order in which the levels should appear in the resulting factor.
.default
character vector of length 1 giving name of default level or NULL for no default.

Details

Each logical "rule" corresponds to a level in the resulting factor. 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.

derivedFactor is designed to be used with transform to add new factor variables to a data frame. See the examples.

Examples

Run this code
Kf <- transform(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 <- transform(HELPrct, drinkstat = 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( ~drinkstat, data=modHELP )

# Method 2: Use .default for last level
modHELP <- transform(HELPrct, drinkstat = derivedFactor(
  abstinent = i1 == 0,
  moderate = (i1<=1 & i2<=3 & sex=='female') |
     (i1<=2 & i2<=4 & sex=='male'),
  .ordered = TRUE,
  .method = "first",
  .default = "highrisk")
)
tally( ~drinkstat, data=modHELP )

# Method 3: use TRUE to catch any fall through slots
modHELP <- transform(HELPrct, drinkstat = derivedFactor(
  abstinent = i1 == 0,
  moderate = (i1<=1 & i2<=3 & sex=='female') |
     (i1<=2 & i2<=4 & sex=='male'),
  highrisk=TRUE,
  .ordered = TRUE,
  .method = "first"
  )
)
tally( ~drinkstat, data=modHELP )

Run the code above in your browser using DataLab