TRABAJO FINAL R BASICO

Esmeralda Acuña Neyra

2020-08-05

PARA OBSERVAR EN R PUBS:

https://rpubs.com/EsmeraldaAN/646447

1. Crear

  • V1: un vector numerico con 30 valores
V1<- c(1:30)
  • V2: un vector numerico que repita 10 veces el valor 1, 10 veces el valor 2 y 10 veces el valor 3. Luego transformar dicho vector como factor y que cada nivel signifique soltero, casado y divorciado
V2<-c(rep(1,10),rep(2,10),rep(3,10))
V2
##  [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
V2<-as.factor(V2)
str(V2)
##  Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
levels(V2)<- c("soltero","casado","divorciado")
V2
##  [1] soltero    soltero    soltero    soltero    soltero    soltero   
##  [7] soltero    soltero    soltero    soltero    casado     casado    
## [13] casado     casado     casado     casado     casado     casado    
## [19] casado     casado     divorciado divorciado divorciado divorciado
## [25] divorciado divorciado divorciado divorciado divorciado divorciado
## Levels: soltero casado divorciado
  • V3: un vector logico con 30 valores
V3= round(seq(from=5,to=50,length=30),1)
V3
##  [1]  5.0  6.6  8.1  9.7 11.2 12.8 14.3 15.9 17.4 19.0 20.5 22.1 23.6 25.2 26.7
## [16] 28.3 29.8 31.4 32.9 34.5 36.0 37.6 39.1 40.7 42.2 43.8 45.3 46.9 48.4 50.0
  • ¿cuantos valores estan en el rango de 10 y 30?
V3 = V3 >= 10 & V3 <= 30
V3
##  [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [13]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE
table(V3)
## V3
## FALSE  TRUE 
##    17    13
  • V4: un vector de cadena con 30 valores
V4<- paste(c("Dias"),1:30,sep="-")

V4
##  [1] "Dias-1"  "Dias-2"  "Dias-3"  "Dias-4"  "Dias-5"  "Dias-6"  "Dias-7" 
##  [8] "Dias-8"  "Dias-9"  "Dias-10" "Dias-11" "Dias-12" "Dias-13" "Dias-14"
## [15] "Dias-15" "Dias-16" "Dias-17" "Dias-18" "Dias-19" "Dias-20" "Dias-21"
## [22] "Dias-22" "Dias-23" "Dias-24" "Dias-25" "Dias-26" "Dias-27" "Dias-28"
## [29] "Dias-29" "Dias-30"
  • M1: una matriz con 16 valores
M1<-matrix(rpois(16,9),4,4)
  
M1
##      [,1] [,2] [,3] [,4]
## [1,]    9    7    7   13
## [2,]    9    8    8    7
## [3,]   13    7   16   12
## [4,]   15   11   12   11
  • M2: una matriz con 16 valores
M2<-matrix(rchisq(16,2,0),4,4)
M2
##           [,1]      [,2]      [,3]      [,4]
## [1,] 0.3430688 0.6206263 0.9045421 1.2447106
## [2,] 0.1783665 2.6920901 0.5751720 0.4291419
## [3,] 5.6945109 5.7452340 1.7342675 0.9160134
## [4,] 3.7062691 2.1136820 6.2938233 0.4145837

-M3: crear una matriz que sea la multiplicación de M1 y M2

M3<- M1%*%M2
M3
##           [,1]      [,2]      [,3]     [,4]
## [1,]  92.37926  92.12477 106.12666 26.00807
## [2,]  76.01452  87.88000  70.67316 24.86572
## [3,] 141.29586 144.20070 119.05941 38.81645
## [4,] 116.21115 131.11570 109.93829 38.94380

-M4: crear una matriz que sea la inversa de la matriz M1

library(MASS)

M4<-ginv(M1)
M4
##              [,1]        [,2]         [,3]        [,4]
## [1,] -0.054223149 -0.61209593 -0.057351408  0.51616267
## [2,] -0.004171011  0.56830031 -0.081334724 -0.26798749
## [3,] -0.069864442  0.26903024  0.137643379 -0.23879041
## [4,]  0.154327424 -0.02711157  0.009384776 -0.08446298
  • A1: un array de 3 dimensiones, cada dimension debe tener 12 valores, en total 36 valores
A1= 1:36
A1
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36
dim(A1)= c(12,3,1)
A1
## , , 1
## 
##       [,1] [,2] [,3]
##  [1,]    1   13   25
##  [2,]    2   14   26
##  [3,]    3   15   27
##  [4,]    4   16   28
##  [5,]    5   17   29
##  [6,]    6   18   30
##  [7,]    7   19   31
##  [8,]    8   20   32
##  [9,]    9   21   33
## [10,]   10   22   34
## [11,]   11   23   35
## [12,]   12   24   36
class(A1)
## [1] "array"
  • DF1: un dataframe que contenga los vectores V1, V2, V3 y V4
DF1<- data.frame(V1,V2,V3,V4)
DF1
##    V1      V2    V3      V4
## 1   1 soltero FALSE  Dias-1
## 2   2 soltero FALSE  Dias-2
## 3   3 soltero FALSE  Dias-3
## 4   4 soltero FALSE  Dias-4
## 5   5 soltero  TRUE  Dias-5
## 6   6 soltero  TRUE  Dias-6
## 7   7 soltero  TRUE  Dias-7
## 8   8 soltero  TRUE  Dias-8
## 9   9 soltero  TRUE  Dias-9
## 10 10 soltero  TRUE Dias-10
## 11 11  casado  TRUE Dias-11
## 12 12  casado  TRUE Dias-12
## 13 13  casado  TRUE Dias-13
## 14 14  casado  TRUE Dias-14
## 15 15  casado  TRUE Dias-15
## 16 16  casado  TRUE Dias-16
## 17 17  casado  TRUE Dias-17
## 18 18  casado FALSE Dias-18
##  [ reached 'max' / getOption("max.print") -- omitted 12 rows ]
  • DF2: un dataframe nuevo que sea el mismo DF1 pero añadiendo una variable nueva que sea el resultado de multiplicar por 100 el vector V1
DF2<- data.frame(V1*100,V2,V3,V4)
DF2
##    V1...100      V2    V3      V4
## 1       100 soltero FALSE  Dias-1
## 2       200 soltero FALSE  Dias-2
## 3       300 soltero FALSE  Dias-3
## 4       400 soltero FALSE  Dias-4
## 5       500 soltero  TRUE  Dias-5
## 6       600 soltero  TRUE  Dias-6
## 7       700 soltero  TRUE  Dias-7
## 8       800 soltero  TRUE  Dias-8
## 9       900 soltero  TRUE  Dias-9
## 10     1000 soltero  TRUE Dias-10
## 11     1100  casado  TRUE Dias-11
## 12     1200  casado  TRUE Dias-12
## 13     1300  casado  TRUE Dias-13
## 14     1400  casado  TRUE Dias-14
## 15     1500  casado  TRUE Dias-15
## 16     1600  casado  TRUE Dias-16
## 17     1700  casado  TRUE Dias-17
## 18     1800  casado FALSE Dias-18
##  [ reached 'max' / getOption("max.print") -- omitted 12 rows ]
str(DF2)
## 'data.frame':    30 obs. of  4 variables:
##  $ V1...100: num  100 200 300 400 500 600 700 800 900 1000 ...
##  $ V2      : Factor w/ 3 levels "soltero","casado",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ V3      : logi  FALSE FALSE FALSE FALSE TRUE TRUE ...
##  $ V4      : chr  "Dias-1" "Dias-2" "Dias-3" "Dias-4" ...
  • L1: lista que contenga todos los objetos mencionados anteriormente
L1<- list(V1,V2,V3,V4,M1,M2,M3,M4,A1,DF1,DF2)
L1  
## [[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30
## 
## [[2]]
##  [1] soltero    soltero    soltero    soltero    soltero    soltero   
##  [7] soltero    soltero    soltero    soltero    casado     casado    
## [13] casado     casado     casado     casado     casado     casado    
## [19] casado     casado     divorciado divorciado divorciado divorciado
## [25] divorciado divorciado divorciado divorciado divorciado divorciado
## Levels: soltero casado divorciado
## 
## [[3]]
##  [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [13]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE
## 
## [[4]]
##  [1] "Dias-1"  "Dias-2"  "Dias-3"  "Dias-4"  "Dias-5"  "Dias-6"  "Dias-7" 
##  [8] "Dias-8"  "Dias-9"  "Dias-10" "Dias-11" "Dias-12" "Dias-13" "Dias-14"
## [15] "Dias-15" "Dias-16" "Dias-17" "Dias-18" "Dias-19" "Dias-20" "Dias-21"
## [22] "Dias-22" "Dias-23" "Dias-24" "Dias-25" "Dias-26" "Dias-27" "Dias-28"
## [29] "Dias-29" "Dias-30"
## 
## [[5]]
##      [,1] [,2] [,3] [,4]
## [1,]    9    7    7   13
## [2,]    9    8    8    7
## [3,]   13    7   16   12
## [4,]   15   11   12   11
## 
## [[6]]
##           [,1]      [,2]      [,3]      [,4]
## [1,] 0.3430688 0.6206263 0.9045421 1.2447106
## [2,] 0.1783665 2.6920901 0.5751720 0.4291419
## [3,] 5.6945109 5.7452340 1.7342675 0.9160134
## [4,] 3.7062691 2.1136820 6.2938233 0.4145837
## 
## [[7]]
##           [,1]      [,2]      [,3]     [,4]
## [1,]  92.37926  92.12477 106.12666 26.00807
## [2,]  76.01452  87.88000  70.67316 24.86572
## [3,] 141.29586 144.20070 119.05941 38.81645
## [4,] 116.21115 131.11570 109.93829 38.94380
## 
## [[8]]
##              [,1]        [,2]         [,3]        [,4]
## [1,] -0.054223149 -0.61209593 -0.057351408  0.51616267
## [2,] -0.004171011  0.56830031 -0.081334724 -0.26798749
## [3,] -0.069864442  0.26903024  0.137643379 -0.23879041
## [4,]  0.154327424 -0.02711157  0.009384776 -0.08446298
## 
## [[9]]
## , , 1
## 
##       [,1] [,2] [,3]
##  [1,]    1   13   25
##  [2,]    2   14   26
##  [3,]    3   15   27
##  [4,]    4   16   28
##  [5,]    5   17   29
##  [6,]    6   18   30
##  [7,]    7   19   31
##  [8,]    8   20   32
##  [9,]    9   21   33
## [10,]   10   22   34
## [11,]   11   23   35
## [12,]   12   24   36
## 
## 
## [[10]]
##    V1      V2    V3      V4
## 1   1 soltero FALSE  Dias-1
## 2   2 soltero FALSE  Dias-2
## 3   3 soltero FALSE  Dias-3
## 4   4 soltero FALSE  Dias-4
## 5   5 soltero  TRUE  Dias-5
## 6   6 soltero  TRUE  Dias-6
## 7   7 soltero  TRUE  Dias-7
## 8   8 soltero  TRUE  Dias-8
## 9   9 soltero  TRUE  Dias-9
## 10 10 soltero  TRUE Dias-10
## 11 11  casado  TRUE Dias-11
## 12 12  casado  TRUE Dias-12
## 13 13  casado  TRUE Dias-13
## 14 14  casado  TRUE Dias-14
## 15 15  casado  TRUE Dias-15
## 16 16  casado  TRUE Dias-16
## 17 17  casado  TRUE Dias-17
## 18 18  casado FALSE Dias-18
##  [ reached 'max' / getOption("max.print") -- omitted 12 rows ]
## 
## [[11]]
##    V1...100      V2    V3      V4
## 1       100 soltero FALSE  Dias-1
## 2       200 soltero FALSE  Dias-2
## 3       300 soltero FALSE  Dias-3
## 4       400 soltero FALSE  Dias-4
## 5       500 soltero  TRUE  Dias-5
## 6       600 soltero  TRUE  Dias-6
## 7       700 soltero  TRUE  Dias-7
## 8       800 soltero  TRUE  Dias-8
## 9       900 soltero  TRUE  Dias-9
## 10     1000 soltero  TRUE Dias-10
## 11     1100  casado  TRUE Dias-11
## 12     1200  casado  TRUE Dias-12
## 13     1300  casado  TRUE Dias-13
## 14     1400  casado  TRUE Dias-14
## 15     1500  casado  TRUE Dias-15
## 16     1600  casado  TRUE Dias-16
## 17     1700  casado  TRUE Dias-17
## 18     1800  casado FALSE Dias-18
##  [ reached 'max' / getOption("max.print") -- omitted 12 rows ]
  • Realizar dos ejemplos de indexación en listas: el primero debe seleccionar V1 y el segundo debe seleccionar los primeros 5 valores de V2.
IL<- L1[[1]]
IL
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30
class(IL)
## [1] "integer"
IL_1<- L1[[2]][1:5]
IL_1
## [1] soltero soltero soltero soltero soltero
## Levels: soltero casado divorciado

2. Importar datasets y crear gráficos:

  • Importar en R los archivos: Clientes_2016_2017.xlsx (datos de clientes), Depositos_2016.csv y Depositos_2017.csv (datos transaccionales de depositos), llamarlos BD1, BD2 y BD3 respectivamente
getwd()
## [1] "C:/Users/Esmeralda/Documents/R/curso r"
setwd("C:/Users/Esmeralda/Documents/R/curso r/datos")
library(readxl)

BD1<-read_excel("Clientes_2016_2017.xlsx")
BD2<-read.csv("Depositos_2016.csv")
BD3<-read.csv("Depositos_2017.csv")
  • Crear BD23, debe representar la union de BD2 y BD3
BD23=rbind(BD2,BD3)
BD23
##         ID    CUENTA MONTO_SOLES FECHA_TRANSAX
## 1  ID12796 CORRIENTE      150.32    07/02/2016
## 2  ID12797    AHORRO     1211.89    30/07/2016
## 3  ID12797 CORRIENTE      512.92    09/08/2016
## 4  ID12798    AHORRO      541.13    21/12/2016
## 5  ID12798 CORRIENTE      735.48    21/05/2016
## 6  ID12799    AHORRO      298.15    19/07/2016
## 7  ID12799 CORRIENTE       55.43    28/10/2016
## 8  ID12800    AHORRO       88.85    26/02/2016
## 9  ID12800 CORRIENTE      610.90    29/07/2016
## 10 ID12801    AHORRO      319.55    17/12/2016
## 11 ID12802 CORRIENTE     1034.09    27/05/2016
## 12 ID12802 CORRIENTE     1311.47    22/07/2016
## 13 ID12803    AHORRO     1471.71    13/07/2016
## 14 ID12804    AHORRO     2209.38    16/04/2016
## 15 ID12804 CORRIENTE     1204.61    02/05/2016
## 16 ID12805 CORRIENTE     5171.41    07/11/2016
## 17 ID12806 CORRIENTE     2420.34    18/06/2016
## 18 ID12807 CORRIENTE     4546.00    11/02/2016
##  [ reached 'max' / getOption("max.print") -- omitted 335 rows ]
  • Crear BD4, que represente el calculo del minimo, maximo, promedio y suma de MONTO_SOLES por cada ID de BD23. BD4 debe tener esta estructura:
library(dplyr)

BD4<-summarise(group_by(BD23, ID), 
               MONTO_min = min(MONTO_SOLES), 
               MONTO_max = max(MONTO_SOLES), 
               MONTO_prom = mean(MONTO_SOLES),
               MONTO_sum = sum(MONTO_SOLES))
  • Crear BD5 que sea la union de registros coincidentes de BD1 y BD4, considerando la variable en común ID.
BD5<-inner_join(BD1, BD4, by="ID")
BD5
## # A tibble: 196 x 12
##    ID     EDAD SEXO  REGION INGRESOS CASADO HIJOS AUTO  MONTO_min MONTO_max
##    <chr> <dbl> <chr> <chr>     <dbl> <chr>  <dbl> <chr>     <dbl>     <dbl>
##  1 ID12~    23 MASC~ LIMA_~    18766 SI         0 SI         1000      1000
##  2 ID12~    30 MASC~ LIMA_~     9915 NO         1 NO          100       100
##  3 ID12~    45 FEME~ LIMA_~    21881 NO         0 SI          150       300
##  4 ID12~    50 MASC~ LIMA_~    46794 SI         2 NO         2000      2000
##  5 ID12~    41 FEME~ LIMA_~    20721 SI         0 SI          150      2742
##  6 ID12~    20 MASC~ LIMA_~    16688 NO         1 NO          132      1412
##  7 ID12~    46 FEME~ LIMA_~    39068 SI         0 SI           10        10
##  8 ID12~    50 FEME~ LIMA_~    27740 SI         1 SI            5         5
##  9 ID12~    42 MASC~ LIMA_~    33584 NO         3 SI           50        50
## 10 ID12~    57 FEME~ LIMA_~    19621 SI         1 SI           43       980
## # ... with 186 more rows, and 2 more variables: MONTO_prom <dbl>,
## #   MONTO_sum <dbl>
  • De BD5, graficar un histograma de la suma de MONTO_soles, separado por SEXO
library(ggplot2) 
library(GGally) 
library(plotly) 


str(BD5)
## tibble [196 x 12] (S3: tbl_df/tbl/data.frame)
##  $ ID        : chr [1:196] "ID12701" "ID12702" "ID12703" "ID12704" ...
##  $ EDAD      : num [1:196] 23 30 45 50 41 20 46 50 42 57 ...
##  $ SEXO      : chr [1:196] "MASCULINO" "MASCULINO" "FEMENINO" "MASCULINO" ...
##  $ REGION    : chr [1:196] "LIMA_ESTE" "LIMA_CENTRO" "LIMA_CENTRO" "LIMA_NORTE" ...
##  $ INGRESOS  : num [1:196] 18766 9915 21881 46794 20721 ...
##  $ CASADO    : chr [1:196] "SI" "NO" "NO" "SI" ...
##  $ HIJOS     : num [1:196] 0 1 0 2 0 1 0 1 3 1 ...
##  $ AUTO      : chr [1:196] "SI" "NO" "SI" "NO" ...
##  $ MONTO_min : num [1:196] 1000 100 150 2000 150 132 10 5 50 43 ...
##  $ MONTO_max : num [1:196] 1000 100 300 2000 2742 ...
##  $ MONTO_prom: num [1:196] 1000 100 225 2000 1027 ...
##  $ MONTO_sum : num [1:196] 1000 100 450 2000 3082 ...
BD5$SEXO<-as.factor(BD5$SEXO)
BD5$CASADO<-as.factor(BD5$CASADO)
BD5$AUTO<-as.factor(BD5$AUTO)

ggplotly(ggplot(BD5,aes(x=MONTO_sum,fill=SEXO))+geom_histogram(position = "stack"))
  • De BD5, graficar una matriz de dispersion con las variables minimo, maximo, promedio y suma de MONTO_SOLES, agrupado por REGION
ggpairs(BD5, columns = c("MONTO_min", "MONTO_max", "MONTO_prom","MONTO_sum"),
        mapping = aes(color=REGION))

3. Crear una función que calcule el coeficiente de variabilidad de un vector numérico

\[CV= \frac{promedio}{desviación estandár}\]

funcionCV<- function(vect){
  media<-mean(vect)
  desv<-sd(vect)
  print(media/desv)
  
}

funcionCV(c(1:20))
## [1] 1.774824