Examples for 'base::factor'


Factors

Aliases: factor ordered is.factor is.ordered as.factor as.ordered is.na<-.factor Math.factor Ops.factor Summary.factor Ops.ordered Summary.ordered addNA .valid.factor c.factor

Keywords: category NA

### ** Examples

(ff <- factor(substring("statistics", 1:10, 1:10), levels = letters))
 [1] s t a t i s t i c s
Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z
as.integer(ff)      # the internal codes
 [1] 19 20  1 20  9 19 20  9  3 19
(f. <- factor(ff))  # drops the levels that do not occur
 [1] s t a t i s t i c s
Levels: a c i s t
ff[, drop = TRUE]   # the same, more transparently
 [1] s t a t i s t i c s
Levels: a c i s t
factor(letters[1:20], labels = "letter")
 [1] letter1  letter2  letter3  letter4  letter5  letter6  letter7  letter8 
 [9] letter9  letter10 letter11 letter12 letter13 letter14 letter15 letter16
[17] letter17 letter18 letter19 letter20
20 Levels: letter1 letter2 letter3 letter4 letter5 letter6 letter7 ... letter20
class(ordered(4:1)) # "ordered", inheriting from "factor"
[1] "ordered" "factor" 
z <- factor(LETTERS[3:1], ordered = TRUE)
## and "relational" methods work:
stopifnot(sort(z)[c(1,3)] == range(z), min(z) < max(z))
## Don't show: 
of <- ordered(ff)
stopifnot(identical(range(of, rev(of)), of[3:2]),
          identical(max(of), of[2]))
## End(Don't show)

## suppose you want "NA" as a level, and to allow missing values.
(x <- factor(c(1, 2, NA), exclude = NULL))
[1] 1    2    <NA>
Levels: 1 2 <NA>
is.na(x)[2] <- TRUE
x  # [1] 1    <NA> <NA>
[1] 1    <NA> <NA>
Levels: 1 2 <NA>
is.na(x)
[1] FALSE  TRUE FALSE
# [1] FALSE  TRUE FALSE

## More rational, since R 3.4.0 :
factor(c(1:2, NA), exclude =  "" ) # keeps <NA> , as
[1] 1    2    <NA>
Levels: 1 2 <NA>
factor(c(1:2, NA), exclude = NULL) # always did
[1] 1    2    <NA>
Levels: 1 2 <NA>
## exclude = <character>
z # ordered levels 'A < B < C'
[1] C B A
Levels: A < B < C
factor(z, exclude = "C") # does exclude
[1] <NA> B    A   
Levels: A < B
factor(z, exclude = "B") # ditto
[1] C    <NA> A   
Levels: A < C
## Now, labels maybe duplicated:
## factor() with duplicated labels allowing to "merge levels"
x <- c("Man", "Male", "Man", "Lady", "Female")
## Map from 4 different values to only two levels:
(xf <- factor(x, levels = c("Male", "Man" , "Lady",   "Female"),
                 labels = c("Male", "Male", "Female", "Female")))
[1] Male   Male   Male   Female Female
Levels: Male Female
#> [1] Male   Male   Male   Female Female
#> Levels: Male Female

## Using addNA()
Month <- airquality$Month
table(addNA(Month))
   5    6    7    8    9 <NA> 
  31   30   31   31   30    0 
table(addNA(Month, ifany = TRUE))
 5  6  7  8  9 
31 30 31 31 30 

[Package base version 4.2.3 Index]