In this article, we will study the various functions that can be performed with factor variables in R.

## About Factors in R

A factor is a categorical variable in R associated with different levels in it. For instance, nationality or gender can be considered as belonging to factor data. Levels in factors represent the different unique values a factor can take up. A factor in R can be created using the `factor()`

method in R which takes as input the vector belonging to any data type, be it, integer, logical, or character in nature.

## Factor Functions

Here we will see examples of R factor functions for adding, modifying, and ordering the contents of a factor.

### Function to Add new values in a Factor

New values can be added to the factors, only when they are available in the levels of the factor. In case, the value doesn’t exist in the factor, the value has to be added to the levels of the factor first, and then subsequently to the factor. If not added to the factor, the value NA is added to it.

#creating a factor fac <- factor(c("Python","R","R","Python","Python")) cat("Original Factor Values : ", fac) #printing levels of factors print(levels(fac)) #adding another existing level to the factor fac[6] = "R" cat("Factor after adding existing value at the end : ",fac) #adding value not existing level to the factor fac[7] = "Machine Learning" cat("Factor after adding non-existing value at the end : ",fac) #adding value to the level first levels(fac) <- c("R","Python","Machine Learning") #adding value to the fac fac[8] = "Machine Learning" cat("Factor after adding value to levels first and then at the end : ",fac)

##### The code produces the following output :

Original Factor Values : 1 2 2 1 1 [1] "Python" "R" Factor after adding existing value at the end : 1 2 2 1 1 2 Warning message: In `[<-.factor`(`*tmp*`, 6, value = "Machine Learning") : invalid factor level, NA generated Factor after adding non-existing value at the end : 1 2 2 1 1 NA Factor after adding value to levels first and then at the end : 1 2 2 1 1 2 NA 3

### Function to Modify the values in a Factor

A value in the factor can be modified by specifying the position using the indexing operator, [ ] and then reassigning it to a new value.

#creating a factor fac <- factor(c("Python","R","ML","R","Python","Python","ML","R","ML")) cat("Original Factor Values : ", fac) #printing levels of factors print(levels(fac)) #modifying the value at third index fac[3] = "R" cat("Modified Factor Values : ", fac)

##### Output

Original Factor Values : 2 3 1 3 2 2 1 3 1 #printing levels of factors [1] "ML" "Python" "R" Modified Factor Values : 2 3 3 3 2 2 1 3 1

### Modifying levels of the factor

The factor levels can also be modified using the `levels()`

method and reassigning it to the new set of levels. However, the length of the new factor level vector should be equivalent to the original factor level vector. Values remain the same.

#creating a factor fac <- factor(c("Python","R","ML","R","Python","Python","ML","R","ML")) cat("Original Factor Values : ", fac) #printing levels of factors cat("Original Factor Levels : ", levels(fac)) #replacing the level of the factor levels(fac) = c("R","Python","Machine Learning") cat("Modified Factor Levels : ", levels(fac))

##### The code produces the following output :

Original Factor Values : 2 3 1 3 2 2 1 3 1> #printing levels of factors Original Factor Levels : ML Python R Modified Factor Levels : R Python Machine Learning

### Function to Order the levels of the Factor

The factor levels are ordered in alphabetical order by default. The levels however can be reordered by reassigning the levels and assigning them to the new vector. The levels, though, remain the same.

#creating a factor fac <- factor(c("Python","R","ML","R","Python","Python","ML","R","ML")) cat("Original Factor Values : ", fac) #printing levels of factors cat("Original Factor Levels : ", levels(fac)) #replacing the level of the factor levels(fac) = c("Python","ML","R") cat("Modified Factor Levels : ", levels(fac))

##### Output

Original Factor Values : 2 3 1 3 2 2 1 3 1> #printing levels of factors Original Factor Levels : ML Python R Modified Factor Levels : Python ML R