Leer base de datos

library(readxl)
data <- read_excel("Renuncia_Datos_SemanaCierreEnfoque_LIT.xlsx")
summary(data)
##    renuncia              edad          viaje           departamento      
##  Length:1470        Min.   :18.00   Length:1470        Length:1470       
##  Class :character   1st Qu.:30.00   Class :character   Class :character  
##  Mode  :character   Median :36.00   Mode  :character   Mode  :character  
##                     Mean   :36.92                                        
##                     3rd Qu.:43.00                                        
##                     Max.   :60.00                                        
##                                                                          
##  distanciacasa        grado          genero           nivellaboral  
##  Min.   : 1.000   Min.   :1.000   Length:1470        Min.   :1.000  
##  1st Qu.: 2.000   1st Qu.:2.000   Class :character   1st Qu.:1.000  
##  Median : 7.000   Median :3.000   Mode  :character   Median :2.000  
##  Mean   : 9.193   Mean   :2.913                      Mean   :2.064  
##  3rd Qu.:14.000   3rd Qu.:4.000                      3rd Qu.:3.000  
##  Max.   :29.000   Max.   :5.000                      Max.   :5.000  
##  NA's   :2        NA's   :2                                         
##   satisfaccion     estatus              sueldo          desemp     
##  Min.   :1.000   Length:1470        Min.   : 1009   Min.   :3.000  
##  1st Qu.:2.000   Class :character   1st Qu.: 2911   1st Qu.:3.000  
##  Median :3.000   Mode  :character   Median : 4907   Median :3.000  
##  Mean   :2.728                      Mean   : 6505   Mean   :3.154  
##  3rd Qu.:4.000                      3rd Qu.: 8380   3rd Qu.:3.000  
##  Max.   :4.000                      Max.   :19999   Max.   :4.000  
##  NA's   :1                          NA's   :5       NA's   :45     
##   capacitacion    balancevida      antiguedad    antiguedadpuesto
##  Min.   :0.000   Min.   :1.000   Min.   : 0.00   Min.   : 0.000  
##  1st Qu.:2.000   1st Qu.:2.000   1st Qu.: 3.00   1st Qu.: 2.000  
##  Median :3.000   Median :3.000   Median : 5.00   Median : 3.000  
##  Mean   :2.799   Mean   :2.761   Mean   : 7.01   Mean   : 4.228  
##  3rd Qu.:3.000   3rd Qu.:3.000   3rd Qu.: 9.00   3rd Qu.: 7.000  
##  Max.   :6.000   Max.   :4.000   Max.   :40.00   Max.   :18.000  
##  NA's   :1       NA's   :3       NA's   :1       NA's   :1       
##    promocion       tiempojefe    
##  Min.   : 0.00   Min.   : 0.000  
##  1st Qu.: 0.00   1st Qu.: 2.000  
##  Median : 1.00   Median : 3.000  
##  Mean   : 2.19   Mean   : 4.123  
##  3rd Qu.: 3.00   3rd Qu.: 7.000  
##  Max.   :15.00   Max.   :17.000  
##  NA's   :3

Transformar variables

data$renuncia <- as.factor(data$renuncia)
data$viaje <- as.factor(data$viaje)
data$departamento <- as.factor(data$departamento)
data$genero <- as.factor(data$genero)
data$estatus <- as.factor(data$estatus)
data$renuncia <- as.factor(data$renuncia)
summary(data)
##  renuncia       edad                  viaje      departamento distanciacasa   
##  No:1233   Min.   :18.00   Frecuentemente: 272   IyD   :955   Min.   : 1.000  
##  Si: 237   1st Qu.:30.00   No            : 147   RRHH  : 63   1st Qu.: 2.000  
##            Median :36.00   Poco          :1003   Ventas:445   Median : 7.000  
##            Mean   :36.92   NA's          :  48   NA's  :  7   Mean   : 9.193  
##            3rd Qu.:43.00                                      3rd Qu.:14.000  
##            Max.   :60.00                                      Max.   :29.000  
##                                                               NA's   :2       
##      grado          genero     nivellaboral    satisfaccion         estatus   
##  Min.   :1.000   Hombre:854   Min.   :1.000   Min.   :1.000   Casado    :669  
##  1st Qu.:2.000   Mujer :573   1st Qu.:1.000   1st Qu.:2.000   Divorciado:323  
##  Median :3.000   NA's  : 43   Median :2.000   Median :3.000   Soltero   :461  
##  Mean   :2.913                Mean   :2.064   Mean   :2.728   NA's      : 17  
##  3rd Qu.:4.000                3rd Qu.:3.000   3rd Qu.:4.000                   
##  Max.   :5.000                Max.   :5.000   Max.   :4.000                   
##  NA's   :2                                    NA's   :1                       
##      sueldo          desemp       capacitacion    balancevida   
##  Min.   : 1009   Min.   :3.000   Min.   :0.000   Min.   :1.000  
##  1st Qu.: 2911   1st Qu.:3.000   1st Qu.:2.000   1st Qu.:2.000  
##  Median : 4907   Median :3.000   Median :3.000   Median :3.000  
##  Mean   : 6505   Mean   :3.154   Mean   :2.799   Mean   :2.761  
##  3rd Qu.: 8380   3rd Qu.:3.000   3rd Qu.:3.000   3rd Qu.:3.000  
##  Max.   :19999   Max.   :4.000   Max.   :6.000   Max.   :4.000  
##  NA's   :5       NA's   :45      NA's   :1       NA's   :3      
##    antiguedad    antiguedadpuesto   promocion       tiempojefe    
##  Min.   : 0.00   Min.   : 0.000   Min.   : 0.00   Min.   : 0.000  
##  1st Qu.: 3.00   1st Qu.: 2.000   1st Qu.: 0.00   1st Qu.: 2.000  
##  Median : 5.00   Median : 3.000   Median : 1.00   Median : 3.000  
##  Mean   : 7.01   Mean   : 4.228   Mean   : 2.19   Mean   : 4.123  
##  3rd Qu.: 9.00   3rd Qu.: 7.000   3rd Qu.: 3.00   3rd Qu.: 7.000  
##  Max.   :40.00   Max.   :18.000   Max.   :15.00   Max.   :17.000  
##  NA's   :1       NA's   :1        NA's   :3

Identificar valores nulos

missing_values = colSums(is.na(data))
missing_values
##         renuncia             edad            viaje     departamento 
##                0                0               48                7 
##    distanciacasa            grado           genero     nivellaboral 
##                2                2               43                0 
##     satisfaccion          estatus           sueldo           desemp 
##                1               17                5               45 
##     capacitacion      balancevida       antiguedad antiguedadpuesto 
##                1                3                1                1 
##        promocion       tiempojefe 
##                3                0

Imputar valores faltantes con el promedio de cada columna

promedio_distancia <- mean(data$distanciacasa, na.rm = TRUE)
data$distanciacasa <- ifelse(is.na(data$distanciacasa), promedio_distancia, data$distanciacasa)

promedio_grado <- mean(data$grado, na.rm = TRUE)
data$grado <- ifelse(is.na(data$grado), promedio_grado, data$grado)

promedio_satisfaccion <- mean(data$satisfaccion, na.rm = TRUE)
data$satisfaccion <- ifelse(is.na(data$satisfaccion), promedio_satisfaccion, data$satisfaccion)

promedio_sueldo <- mean(data$sueldo, na.rm = TRUE)
data$sueldo <- ifelse(is.na(data$sueldo), promedio_sueldo, data$sueldo)

promedio_desemp <- mean(data$desemp, na.rm = TRUE)
data$desemp <- ifelse(is.na(data$desemp), promedio_desemp, data$desemp)

promedio_capacitacion <- mean(data$capacitacion, na.rm = TRUE)
data$capacitacion <- ifelse(is.na(data$capacitacion), promedio_capacitacion, data$capacitacion)

promedio_balancevida <- mean(data$balancevida, na.rm = TRUE)
data$balancevida <- ifelse(is.na(data$balancevida), promedio_balancevida, data$balancevida)

promedio_antiguedad <- mean(data$antiguedad, na.rm = TRUE)
data$antiguedad <- ifelse(is.na(data$antiguedad), promedio_antiguedad, data$antiguedad)

promedio_antiguedadpuesto <- mean(data$antiguedadpuesto, na.rm = TRUE)
data$antiguedadpuesto <- ifelse(is.na(data$antiguedadpuesto), promedio_antiguedadpuesto, data$antiguedadpuesto)

promedio_promocion <- mean(data$promocion, na.rm = TRUE)
data$promocion <- ifelse(is.na(data$promocion), promedio_promocion, data$promocion)

Revisar nuevamente datos faltantes

missing_values = colSums(is.na(data))
missing_values
##         renuncia             edad            viaje     departamento 
##                0                0               48                7 
##    distanciacasa            grado           genero     nivellaboral 
##                0                0               43                0 
##     satisfaccion          estatus           sueldo           desemp 
##                0               17                0                0 
##     capacitacion      balancevida       antiguedad antiguedadpuesto 
##                0                0                0                0 
##        promocion       tiempojefe 
##                0                0

Obtener sueldo promedio

promedio_sueldo <- mean(data$sueldo, na.rm=TRUE)
promedio_sueldo
## [1] 6505.149
data$viaje <- ifelse(is.na(data$viaje), "3", data$viaje)
data$departamento <- ifelse(is.na(data$departamento), "1", data$departamento)
data$genero <- ifelse(is.na(data$genero), "1", data$genero)
data$estatus <- ifelse(is.na(data$estatus), "1", data$estatus)

Revisar nuevamente datos faltantes de columnas cualitativas

missing_values = colSums(is.na(data))
missing_values
##         renuncia             edad            viaje     departamento 
##                0                0                0                0 
##    distanciacasa            grado           genero     nivellaboral 
##                0                0                0                0 
##     satisfaccion          estatus           sueldo           desemp 
##                0                0                0                0 
##     capacitacion      balancevida       antiguedad antiguedadpuesto 
##                0                0                0                0 
##        promocion       tiempojefe 
##                0                0

Mostrar base de datos ya limpia

summary(data)
##  renuncia       edad          viaje           departamento      
##  No:1233   Min.   :18.00   Length:1470        Length:1470       
##  Si: 237   1st Qu.:30.00   Class :character   Class :character  
##            Median :36.00   Mode  :character   Mode  :character  
##            Mean   :36.92                                        
##            3rd Qu.:43.00                                        
##            Max.   :60.00                                        
##  distanciacasa        grado          genero           nivellaboral  
##  Min.   : 1.000   Min.   :1.000   Length:1470        Min.   :1.000  
##  1st Qu.: 2.000   1st Qu.:2.000   Class :character   1st Qu.:1.000  
##  Median : 7.000   Median :3.000   Mode  :character   Median :2.000  
##  Mean   : 9.193   Mean   :2.913                      Mean   :2.064  
##  3rd Qu.:14.000   3rd Qu.:4.000                      3rd Qu.:3.000  
##  Max.   :29.000   Max.   :5.000                      Max.   :5.000  
##   satisfaccion     estatus              sueldo          desemp     
##  Min.   :1.000   Length:1470        Min.   : 1009   Min.   :3.000  
##  1st Qu.:2.000   Class :character   1st Qu.: 2915   1st Qu.:3.000  
##  Median :3.000   Mode  :character   Median : 4933   Median :3.000  
##  Mean   :2.728                      Mean   : 6505   Mean   :3.154  
##  3rd Qu.:4.000                      3rd Qu.: 8368   3rd Qu.:3.000  
##  Max.   :4.000                      Max.   :19999   Max.   :4.000  
##   capacitacion    balancevida      antiguedad    antiguedadpuesto
##  Min.   :0.000   Min.   :1.000   Min.   : 0.00   Min.   : 0.000  
##  1st Qu.:2.000   1st Qu.:2.000   1st Qu.: 3.00   1st Qu.: 2.000  
##  Median :3.000   Median :3.000   Median : 5.00   Median : 3.000  
##  Mean   :2.799   Mean   :2.761   Mean   : 7.01   Mean   : 4.228  
##  3rd Qu.:3.000   3rd Qu.:3.000   3rd Qu.: 9.00   3rd Qu.: 7.000  
##  Max.   :6.000   Max.   :4.000   Max.   :40.00   Max.   :18.000  
##    promocion       tiempojefe    
##  Min.   : 0.00   Min.   : 0.000  
##  1st Qu.: 0.00   1st Qu.: 2.000  
##  Median : 1.00   Median : 3.000  
##  Mean   : 2.19   Mean   : 4.123  
##  3rd Qu.: 3.00   3rd Qu.: 7.000  
##  Max.   :15.00   Max.   :17.000

Exportar base de datos Final

#install.packages("writexl")
library(writexl)
write_xlsx(data, "NutrionalTech_Limpio.xlsx")
LS0tDQp0aXRsZTogIkxpbXBpZXphIGRlIGJhc2UgZGUgZGF0b3MiDQphdXRob3I6ICJFcXVpcG8gNiINCmRhdGU6ICJPY3R1YnJlIDIwMjMiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KLS0tDQo8aW1nIHNyYz0iQzpcXFVzZXJzXFw4NTE3MTA3NVxcRGVza3RvcFxcTWFyaWFuYVxcVGVjXFxTVFxcTi5wbmciPg0KDQojIExlZXIgYmFzZSBkZSBkYXRvcw0KYGBge3J9DQpsaWJyYXJ5KHJlYWR4bCkNCmRhdGEgPC0gcmVhZF9leGNlbCgiUmVudW5jaWFfRGF0b3NfU2VtYW5hQ2llcnJlRW5mb3F1ZV9MSVQueGxzeCIpDQpzdW1tYXJ5KGRhdGEpDQpgYGANCg0KIyBUcmFuc2Zvcm1hciB2YXJpYWJsZXMNCmBgYHtyfQ0KZGF0YSRyZW51bmNpYSA8LSBhcy5mYWN0b3IoZGF0YSRyZW51bmNpYSkNCmRhdGEkdmlhamUgPC0gYXMuZmFjdG9yKGRhdGEkdmlhamUpDQpkYXRhJGRlcGFydGFtZW50byA8LSBhcy5mYWN0b3IoZGF0YSRkZXBhcnRhbWVudG8pDQpkYXRhJGdlbmVybyA8LSBhcy5mYWN0b3IoZGF0YSRnZW5lcm8pDQpkYXRhJGVzdGF0dXMgPC0gYXMuZmFjdG9yKGRhdGEkZXN0YXR1cykNCmRhdGEkcmVudW5jaWEgPC0gYXMuZmFjdG9yKGRhdGEkcmVudW5jaWEpDQpzdW1tYXJ5KGRhdGEpDQpgYGANCg0KIyBJZGVudGlmaWNhciB2YWxvcmVzIG51bG9zDQpgYGB7cn0NCm1pc3NpbmdfdmFsdWVzID0gY29sU3Vtcyhpcy5uYShkYXRhKSkNCm1pc3NpbmdfdmFsdWVzDQoNCmBgYA0KDQojIEltcHV0YXIgdmFsb3JlcyBmYWx0YW50ZXMgY29uIGVsIHByb21lZGlvIGRlIGNhZGEgY29sdW1uYQ0KYGBge3J9DQoNCnByb21lZGlvX2Rpc3RhbmNpYSA8LSBtZWFuKGRhdGEkZGlzdGFuY2lhY2FzYSwgbmEucm0gPSBUUlVFKQ0KZGF0YSRkaXN0YW5jaWFjYXNhIDwtIGlmZWxzZShpcy5uYShkYXRhJGRpc3RhbmNpYWNhc2EpLCBwcm9tZWRpb19kaXN0YW5jaWEsIGRhdGEkZGlzdGFuY2lhY2FzYSkNCg0KcHJvbWVkaW9fZ3JhZG8gPC0gbWVhbihkYXRhJGdyYWRvLCBuYS5ybSA9IFRSVUUpDQpkYXRhJGdyYWRvIDwtIGlmZWxzZShpcy5uYShkYXRhJGdyYWRvKSwgcHJvbWVkaW9fZ3JhZG8sIGRhdGEkZ3JhZG8pDQoNCnByb21lZGlvX3NhdGlzZmFjY2lvbiA8LSBtZWFuKGRhdGEkc2F0aXNmYWNjaW9uLCBuYS5ybSA9IFRSVUUpDQpkYXRhJHNhdGlzZmFjY2lvbiA8LSBpZmVsc2UoaXMubmEoZGF0YSRzYXRpc2ZhY2Npb24pLCBwcm9tZWRpb19zYXRpc2ZhY2Npb24sIGRhdGEkc2F0aXNmYWNjaW9uKQ0KDQpwcm9tZWRpb19zdWVsZG8gPC0gbWVhbihkYXRhJHN1ZWxkbywgbmEucm0gPSBUUlVFKQ0KZGF0YSRzdWVsZG8gPC0gaWZlbHNlKGlzLm5hKGRhdGEkc3VlbGRvKSwgcHJvbWVkaW9fc3VlbGRvLCBkYXRhJHN1ZWxkbykNCg0KcHJvbWVkaW9fZGVzZW1wIDwtIG1lYW4oZGF0YSRkZXNlbXAsIG5hLnJtID0gVFJVRSkNCmRhdGEkZGVzZW1wIDwtIGlmZWxzZShpcy5uYShkYXRhJGRlc2VtcCksIHByb21lZGlvX2Rlc2VtcCwgZGF0YSRkZXNlbXApDQoNCnByb21lZGlvX2NhcGFjaXRhY2lvbiA8LSBtZWFuKGRhdGEkY2FwYWNpdGFjaW9uLCBuYS5ybSA9IFRSVUUpDQpkYXRhJGNhcGFjaXRhY2lvbiA8LSBpZmVsc2UoaXMubmEoZGF0YSRjYXBhY2l0YWNpb24pLCBwcm9tZWRpb19jYXBhY2l0YWNpb24sIGRhdGEkY2FwYWNpdGFjaW9uKQ0KDQpwcm9tZWRpb19iYWxhbmNldmlkYSA8LSBtZWFuKGRhdGEkYmFsYW5jZXZpZGEsIG5hLnJtID0gVFJVRSkNCmRhdGEkYmFsYW5jZXZpZGEgPC0gaWZlbHNlKGlzLm5hKGRhdGEkYmFsYW5jZXZpZGEpLCBwcm9tZWRpb19iYWxhbmNldmlkYSwgZGF0YSRiYWxhbmNldmlkYSkNCg0KcHJvbWVkaW9fYW50aWd1ZWRhZCA8LSBtZWFuKGRhdGEkYW50aWd1ZWRhZCwgbmEucm0gPSBUUlVFKQ0KZGF0YSRhbnRpZ3VlZGFkIDwtIGlmZWxzZShpcy5uYShkYXRhJGFudGlndWVkYWQpLCBwcm9tZWRpb19hbnRpZ3VlZGFkLCBkYXRhJGFudGlndWVkYWQpDQoNCnByb21lZGlvX2FudGlndWVkYWRwdWVzdG8gPC0gbWVhbihkYXRhJGFudGlndWVkYWRwdWVzdG8sIG5hLnJtID0gVFJVRSkNCmRhdGEkYW50aWd1ZWRhZHB1ZXN0byA8LSBpZmVsc2UoaXMubmEoZGF0YSRhbnRpZ3VlZGFkcHVlc3RvKSwgcHJvbWVkaW9fYW50aWd1ZWRhZHB1ZXN0bywgZGF0YSRhbnRpZ3VlZGFkcHVlc3RvKQ0KDQpwcm9tZWRpb19wcm9tb2Npb24gPC0gbWVhbihkYXRhJHByb21vY2lvbiwgbmEucm0gPSBUUlVFKQ0KZGF0YSRwcm9tb2Npb24gPC0gaWZlbHNlKGlzLm5hKGRhdGEkcHJvbW9jaW9uKSwgcHJvbWVkaW9fcHJvbW9jaW9uLCBkYXRhJHByb21vY2lvbikNCg0KYGBgDQoNCiMgUmV2aXNhciBudWV2YW1lbnRlIGRhdG9zIGZhbHRhbnRlcw0KYGBge3J9DQptaXNzaW5nX3ZhbHVlcyA9IGNvbFN1bXMoaXMubmEoZGF0YSkpDQptaXNzaW5nX3ZhbHVlcw0KYGBgDQoNCiMgT2J0ZW5lciBzdWVsZG8gcHJvbWVkaW8NCmBgYHtyfQ0KcHJvbWVkaW9fc3VlbGRvIDwtIG1lYW4oZGF0YSRzdWVsZG8sIG5hLnJtPVRSVUUpDQpwcm9tZWRpb19zdWVsZG8NCmBgYA0KDQpgYGB7cn0NCmRhdGEkdmlhamUgPC0gaWZlbHNlKGlzLm5hKGRhdGEkdmlhamUpLCAiMyIsIGRhdGEkdmlhamUpDQpkYXRhJGRlcGFydGFtZW50byA8LSBpZmVsc2UoaXMubmEoZGF0YSRkZXBhcnRhbWVudG8pLCAiMSIsIGRhdGEkZGVwYXJ0YW1lbnRvKQ0KZGF0YSRnZW5lcm8gPC0gaWZlbHNlKGlzLm5hKGRhdGEkZ2VuZXJvKSwgIjEiLCBkYXRhJGdlbmVybykNCmRhdGEkZXN0YXR1cyA8LSBpZmVsc2UoaXMubmEoZGF0YSRlc3RhdHVzKSwgIjEiLCBkYXRhJGVzdGF0dXMpDQoNCmBgYA0KDQojIFJldmlzYXIgbnVldmFtZW50ZSBkYXRvcyBmYWx0YW50ZXMgZGUgY29sdW1uYXMgY3VhbGl0YXRpdmFzDQpgYGB7cn0NCm1pc3NpbmdfdmFsdWVzID0gY29sU3Vtcyhpcy5uYShkYXRhKSkNCm1pc3NpbmdfdmFsdWVzDQpgYGANCiMgTW9zdHJhciBiYXNlIGRlIGRhdG9zIHlhIGxpbXBpYSANCmBgYHtyfQ0Kc3VtbWFyeShkYXRhKQ0KYGBgDQojIEV4cG9ydGFyIGJhc2UgZGUgZGF0b3MgRmluYWwNCmBgYHtyfQ0KI2luc3RhbGwucGFja2FnZXMoIndyaXRleGwiKQ0KbGlicmFyeSh3cml0ZXhsKQ0Kd3JpdGVfeGxzeChkYXRhLCAiTnV0cmlvbmFsVGVjaF9MaW1waW8ueGxzeCIpDQpgYGANCg0KDQoNCg0KDQo=