TRABAJO FINAL R BASICO

Esmeralda Acuña Neyra

2020-09-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,]    7    8   14    5
## [2,]    4    8   12   12
## [3,]    6   16   10   10
## [4,]    6   11    8   12
  • M2: una matriz con 16 valores
M2<-matrix(rchisq(16,2,0),4,4)
M2
##           [,1]      [,2]      [,3]      [,4]
## [1,] 0.6413865 1.0903382 1.1001657 0.3554050
## [2,] 3.1530359 0.9399833 1.6886329 0.0236945
## [3,] 0.5847109 3.0322318 3.2800212 0.9792236
## [4,] 0.3381979 0.3059027 0.1450686 4.8458566

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

M3<- M1%*%M2
M3
##          [,1]     [,2]     [,3]     [,4]
## [1,] 39.59093 59.13299 67.85586 40.61580
## [2,] 38.86474 51.93883 59.01080 71.51214
## [3,] 63.52598 54.96311 67.87002 60.76234
## [4,] 47.26777 44.81053 53.15695 68.37714

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

library(MASS)

M4<-ginv(M1)
M4
##             [,1]        [,2]        [,3]        [,4]
## [1,]  0.15217391 -0.25067935 -0.18614130  0.34239130
## [2,] -0.04347826 -0.01766304  0.16032609 -0.09782609
## [3,]  0.04347826  0.11141304  0.02717391 -0.15217391
## [4,] -0.06521739  0.06725543 -0.07201087  0.10326087
  • 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(6,2,3)
A1
## , , 1
## 
##      [,1] [,2]
## [1,]    1    7
## [2,]    2    8
## [3,]    3    9
## [4,]    4   10
## [5,]    5   11
## [6,]    6   12
## 
## , , 2
## 
##      [,1] [,2]
## [1,]   13   19
## [2,]   14   20
## [3,]   15   21
## [4,]   16   22
## [5,]   17   23
## [6,]   18   24
## 
## , , 3
## 
##      [,1] [,2]
## [1,]   25   31
## [2,]   26   32
## [3,]   27   33
## [4,]   28   34
## [5,]   29   35
## [6,]   30   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,]    7    8   14    5
## [2,]    4    8   12   12
## [3,]    6   16   10   10
## [4,]    6   11    8   12
## 
## [[6]]
##           [,1]      [,2]      [,3]      [,4]
## [1,] 0.6413865 1.0903382 1.1001657 0.3554050
## [2,] 3.1530359 0.9399833 1.6886329 0.0236945
## [3,] 0.5847109 3.0322318 3.2800212 0.9792236
## [4,] 0.3381979 0.3059027 0.1450686 4.8458566
## 
## [[7]]
##          [,1]     [,2]     [,3]     [,4]
## [1,] 39.59093 59.13299 67.85586 40.61580
## [2,] 38.86474 51.93883 59.01080 71.51214
## [3,] 63.52598 54.96311 67.87002 60.76234
## [4,] 47.26777 44.81053 53.15695 68.37714
## 
## [[8]]
##             [,1]        [,2]        [,3]        [,4]
## [1,]  0.15217391 -0.25067935 -0.18614130  0.34239130
## [2,] -0.04347826 -0.01766304  0.16032609 -0.09782609
## [3,]  0.04347826  0.11141304  0.02717391 -0.15217391
## [4,] -0.06521739  0.06725543 -0.07201087  0.10326087
## 
## [[9]]
## , , 1
## 
##      [,1] [,2]
## [1,]    1    7
## [2,]    2    8
## [3,]    3    9
## [4,]    4   10
## [5,]    5   11
## [6,]    6   12
## 
## , , 2
## 
##      [,1] [,2]
## [1,]   13   19
## [2,]   14   20
## [3,]   15   21
## [4,]   16   22
## [5,]   17   23
## [6,]   18   24
## 
## , , 3
## 
##      [,1] [,2]
## [1,]   25   31
## [2,]   26   32
## [3,]   27   33
## [4,]   28   34
## [5,]   29   35
## [6,]   30   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/basico"
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