library(data.table) # Assuming df1 is already a data.table setDT(df1) df1[, `:=`( Rank1 = as.numeric(as.factor(M1)), Rank2 = as.numeric(as.factor(M2)), Rank3 = as.numeric(fct_rev(as.factor(M3))) )]