# How to convert the data type of all columns from integer to factor in R?

R ProgrammingServer Side ProgrammingProgramming

To convert the data type of all columns from integer to factor, we can use lapply function with factor function.

For example, if we have a data frame called df which has all integer columns then we can use the below given command to convert all columns data type to factor −

df<-data.frame(lapply(df,factor))

## Example 1

Following snippet creates a sample data frame −

x1<-rpois(20,1)
x2<-rpois(20,2)
df1<-data.frame(x1,x2)
df1

The following dataframe is created −

   x1 x2
1  1  4
2  3  0
3  0  1
4  1  1
5  1  2
6  1  1
7  1  2
8  3  2
9  2  3
10 3  5
11 1  4
12 0  1
13 2  0
14 2  2
15 0  1
16 3  0
17 0  2
18 0  3
19 1  1
20 0  3

To convert the data type of all columns from integer to factor, add the following code to the above snippet −

x1<-rpois(20,1)
x2<-rpois(20,2)
df1<-data.frame(x1,x2)
str(df1)

## Output

If you execute all the above given snippets as a single program, it generates the following output −

'data.frame': 20 obs. of 2 variables:
$x1: int 1 3 0 1 1 1 1 3 2 3 ...$ x2: int 4 0 1 1 2 1 2 2 3 5 ...

To convert data type of columns in df1 to factor, add the following code to the above snippet −

x1<-rpois(20,1)
x2<-rpois(20,2)
df1<-data.frame(x1,x2)
df1<-data.frame(lapply(df1,factor))
str(df1)

## Outpu

If you execute all the above given snippets as a single program, it generates the following output −

'data.frame': 20 obs. of 2 variables:
$x1: Factor w/ 4 levels "0","1","2","3": 2 4 1 2 2 2 2 4 3 4 ...$ x2: Factor w/ 6 levels "0","1","2","3",..: 5 1 2 2 3 2 3 3 4 6 ...

## Example 2

Following snippet creates a sample data frame −

y1<-sample(0:1,20,replace=TRUE)
y2<-sample(1:4,20,replace=TRUE)
df2<-data.frame(y1,y2)
df2

The following dataframe is created −

   y1 y2
1  0  2
2  1  3
3  0  2
4  0  2
5  1  3
6  0  3
7  0  2
8  1  3
9  0  4
10 0  1
11 0  4
12 0  4
13 0  1
14 1  2
15 0  1
16 0  1
17 1  4
18 1  2
19 1  3
20 1  2

To convert the data type of all columns from integer to factor, add the following code to the above snippet −

y1<-sample(0:1,20,replace=TRUE)
y2<-sample(1:4,20,replace=TRUE)
df2<-data.frame(y1,y2)
str(df2)

## Output

If you execute all the above given snippets as a single program, it generates the following output −

'data.frame': 20 obs. of 2 variables:
$y1: int 0 1 0 0 1 0 0 1 0 0 ...$ y2: int 2 3 2 2 3 3 2 3 4 1 ...

To convert data type of columns in df2 to factor, add the following code to the above snippet −

y1<-sample(0:1,20,replace=TRUE)
y2<-sample(1:4,20,replace=TRUE)
df2<-data.frame(y1,y2)
df2<-data.frame(lapply(df2,factor))
str(df2)

## Output

If you execute all the above given snippets as a single program, it generates the following output −

'data.frame': 20 obs. of 2 variables:
$y1: Factor w/ 2 levels "0","1": 1 2 1 1 2 1 1 2 1 1 ...$ y2: Factor w/ 4 levels "1","2","3","4": 2 3 2 2 3 3 2 3 4 1 ...