#instalar libreria deseada 
#install.packages('sqldf')
library (sqldf)
## Loading required package: gsubfn
## Loading required package: proto
## Loading required package: RSQLite

Cargamos la informacion de nuestras bases:

#Definir directorio
setwd("G:/TRABAJO/DOCENCIA/KONRAND LORENZ")
#Cargar las bases de datos de interes
nomina=read.csv2("BDD_NOMINA.csv", header = TRUE, sep = ";", dec=",")
perfil=read.csv2("BDD_PERFIL.csv", header = TRUE, sep = ";", dec=",")
head(nomina,5)
##   TIPO_ID_CLIENTE ID_CLIENTE Ingreso meses_contrato
## 1               C       9604 1500000             18
## 2               C      28898 3000000             30
## 3               C      23331 2250000             24
## 4               C      31254 4000000             30
## 5               C      15325 3000000             19
nomina$meses_contrato=as.integer(nomina$meses_contrato)
head(nomina,3)
##   TIPO_ID_CLIENTE ID_CLIENTE Ingreso meses_contrato
## 1               C       9604 1500000             18
## 2               C      28898 3000000             30
## 3               C      23331 2250000             24
head(perfil,5)
##   TIPO_ID_CLIENTE ID_CLIENTE CLSEXO CLESTADO_CIVIL EDAD_ANOS CLNIVEL_EDUCATIVO
## 1               C       9604      F         CASADO        44          PRIMARIA
## 2               C      28898      F    UNION LIBRE        22     UNIVERSITARIO
## 3               C      23331      M         CASADO        41      BACHILLERATO
## 4               C      31254      F    UNION LIBRE        32           TECNICO
## 5               C      15325      F    UNION LIBRE        40           TECNICO
##   CLTIPO_VIVIENDA CIUDAD_AGRUPADA
## 1          PROPIA          BOGOTA
## 2        FAMILIAR          BOGOTA
## 3       ARRENDADA          BOGOTA
## 4        FAMILIAR          BOGOTA
## 5          PROPIA        MEDELLIN

#EJERCICIO A:Indique el ingreso promedio de las mujeres entre 20 a 25 anos, compare con el mismo rango para los hombres.

ex1=sqldf('
SELECT b.CLSEXO, avg(a.Ingreso) as avg_ingreso
FROM nomina                   a
INNER JOIN perfil             b
ON a.ID_CLIENTE=b.ID_CLIENTE
WHERE b.EDAD_ANOS >=20 and
 b.EDAD_ANOS <=25
GROUP BY b.CLSEXO
')
ex1
##   CLSEXO avg_ingreso
## 1      F     4082623
## 2      M     3969350

El ingreso en el rango de edad de 20 a 25 anos para mujeres es mayor.

#EJERCICIO B: Indique la edad promedio de los empleados segun el tipo de vivienda.

ex2=sqldf('
SELECT CLTIPO_VIVIENDA,AVG(EDAD_ANOS) AS EDAD
FROM perfil  
GROUP BY CLTIPO_VIVIENDA
ORDER BY EDAD
')
ex2
##   CLTIPO_VIVIENDA     EDAD
## 1        FAMILIAR 39.56418
## 2       ARRENDADA 41.29392
## 3          PROPIA 50.05309

Se observa un promedio de edad mayor en aquellos empleados que tienen vivienda propia.

#EJERCICIO C: Calcule empleados que tiene la empresa por genero en cada ciudad.

ex3=sqldf('
SELECT CIUDAD_AGRUPADA,CLSEXO,COUNT(ID_CLIENTE) as EMPLEADOS
FROM perfil  
GROUP BY CIUDAD_AGRUPADA,CLSEXO
')
ex3
##   CIUDAD_AGRUPADA CLSEXO EMPLEADOS
## 1          BOGOTA      F      1915
## 2          BOGOTA      M      1921
## 3            CALI      F       296
## 4            CALI      M       150
## 5        MEDELLIN      F       698
## 6        MEDELLIN      M       486
#bonus track
ex3$prop_emple = prop.table(ex3$EMPLEADOS)*100
ex3
##   CIUDAD_AGRUPADA CLSEXO EMPLEADOS prop_emple
## 1          BOGOTA      F      1915  35.034760
## 2          BOGOTA      M      1921  35.144530
## 3            CALI      F       296   5.415295
## 4            CALI      M       150   2.744237
## 5        MEDELLIN      F       698  12.769850
## 6        MEDELLIN      M       486   8.891328

En Cali y Medellin se observa diferencia entre Hombres y Mujeres, existiendo una mayor proporcion de estas.

#EJERCICIO D: Realice rangos en la variable meses_contrato (0 a 12; 13 a 24, 25 a 36 y 36 o mas), calcule el promedio de la edad de los empleados en dichos rangos y el promedio del ingreso.

ex4=sqldf('
SELECT CASE 
      WHEN (a.meses_contrato) between 0 and 12 then "0 a 12"
      WHEN (a.meses_contrato) between 13 and 24 then "13 a 24"
      WHEN (a.meses_contrato) between 25 and 36 then "25 a 36"
      ELSE "37 o mas" end r_meses_contrato,
      count(a.ID_CLIENTE) as empleados,
      avg(b.EDAD_ANOS) as avg_edad,
      avg(a.Ingreso) as avg_Ingreso
      
FROM nomina                       a
INNER JOIN perfil                 b
ON a.ID_CLIENTE=b.ID_CLIENTE
GROUP BY r_meses_contrato
')
head(ex4,5)
##   r_meses_contrato empleados avg_edad avg_Ingreso
## 1           0 a 12       765 40.47451     2052118
## 2          13 a 24      2776 42.96218     4156374
## 3          25 a 36      1572 45.23155    10491358
## 4         37 o mas       353 46.82436    34067083