R – Factors

27 Oct, 2021
Factors in R Programming Language are data structures that are implemented to categorize the data or represent categorical data and store it on multiple levels. 
They can be stored as integers with a corresponding label to every unique integer. Though factors may look similar to character vectors, they are integers and care must be taken while using them as strings. The factor accepts only a restricted number of distinct values. For example, a data field such as gender may contain values only from female, male, or transgender.
In the above example, all the possible cases are known beforehand and are predefined. These distinct values are known as levels. After a factor is created it only consists of levels that are by default sorted alphabetically.  
x: It is the vector that needs to be converted into a factor.
Levels: It is a set of distinct values which are given to the input vector x.
Labels: It is a character vector corresponding to the number of labels.
Exclude: This will mention all the values you want to exclude.
Ordered: This logical attribute decides whether the levels are ordered.
nmax: It will decide the upper limit for the maximum number of levels.
The command used to create or modify a factor in R language is – factor() with a vector as input. The two steps to creating a factor are:  
Creating a vector
Converting the vector created into a factor using function factor()
Examples: Let us create a factor gender with levels female, male and transgender.  
R
# Creating a vectorx < -c("female", "male", "male", "female")print(x) # Converting the vector x into a factor# named gendergender < -factor(x)print(gender)
Output: 
[1] "female" "male"   "male"   "female"
[1] female male   male   female
Levels: female male
Levels can also be predefined by the programmer. 
R
# Creating a factor with levels defined by programmergender <- factor(c("female", "male", "male", "female"),          levels = c("female", "transgender", "male"));gender
Output: 
[1] female male   male   female
Levels: female transgender male
Further one can check the levels of a factor by using function levels(). 
The function is.factor() is used to check whether the variable is a factor and returns “TRUE” if it is a factor. 
R
gender <- factor(c("female", "male", "male", "female"));print(is.factor(gender))
Output: 
[1] TRUE
Function class() is also used to check whether the variable is a factor and if true returns “factor”. 
R
gender <- factor(c("female", "male", "male", "female"));class(gender)
Output: 
[1] "factor" 
Like we access elements of a vector, the same way we access the elements of a factor. If gender is a factor then gender[i] would mean accessing ith element in the factor. 
Example:  
R
gender <- factor(c("female", "male", "male", "female"));gender[3]
Output: 
[1] male
Levels: female male
More than one element can be accessed at a time. 
Example: 
R
gender <- factor(c("female", "male", "male", "female"));gender[c(2, 4)]
Output: 
[1] male   female
Levels: female male
Example: 
R
gender <- factor(c("female", "male", "male", "female"  ));gender[-3]
Output: 
[1] female male   female
Levels: female male
After a factor is formed, its components can be modified but the new values which need to be assigned must be at the predefined level. 
Example:  
R
gender <- factor(c("female", "male", "male", "female"  ));gender[2]<-"female"gender
Output: 
[1] female female male   female
Levels: female male
For selecting all the elements of the factor gender except ith element, gender[-i] should be used. So if you want to modify a factor and add value out of predefines levels, then first modify levels. 
Example:  
R
gender <- factor(c("female", "male", "male", "female"  )); # add new levellevels(gender) <- c(levels(gender), "other")   gender[3] <- "other"gender
Output: 
[1] female male   other  female
Levels: female male other 
The Data frame is similar to a 2D array with the columns containing all the values of one variable and the rows having one set of values from every column. There are four things to remember about data frames:  
column names are compulsory and cannot be empty.
Unique names should be assigned to each row.
The data frame’s data can be only of three types- factor, numeric, and character type.
The same number of data items must be present in each column.
In R language when we create a data frame, its column is categorical data and hence a factor is automatically created on it.We can create a data frame and check if its column is a factor. 
Example:  
R
age <- c(40, 49, 48, 40, 67, 52, 53) salary <- c(103200, 106200, 150200,            10606, 10390, 14070, 10220)gender <- c("male", "male", "transgender",            "female", "male", "female", "transgender")employee<- data.frame(age, salary, gender) print(employee) print(is.factor(employee$gender))
Output: 
  age salary      gender
1  40 103200        male
2  49 106200        male
3  48 150200 transgender
4  40  10606      female
5  67  10390        male
6  52  14070      female
7  53  10220 transgender
[1] TRUE
anikakapoor
kumar_satyam
R Data-types
R Language
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Change column name of a given DataFrame in R
Filter data by multiple conditions in R using Dplyr
How to Replace specific values in column in R DataFrame ?
Change Color of Bars in Barchart using ggplot2 in R
How to Split Column Into Multiple Columns in R DataFrame?
Loops in R (for, while, repeat)
Adding elements in a vector in R programming - append() method
Group by function in R using Dplyr
How to change Row Names of DataFrame in R ?
Convert Factor to Numeric and Numeric to Factor in R Programming