Establece tu carpeta de trabajo

¿Cuál será tu carpeta de trabajo? Es aquella donde se encuentra la data con la que deseas trabajar en R. ¿Cómo estableces tu carpeta de trabajo? Eso lo haces con la opción Set as Working Directory (previamente debes haber localizado correctamente la carpeta donde se encuentra la data).


R Notebook

Para hacer más sencillo el trabajo con R en Posit (RStudio), podemos hacer uso de un R Markdown o un R Notebook. Como el nombre de este último lo indica, estos dos son una especie de cuaderno (una suerte de bloc de notas) interactivo donde, a la vez que se hace notas como en cualquier procesador de texto, se puede además introducir múltiples secuencias de código de R que pueden ser ejecutadas progresivamente para llegar a los resultados deseados. Es decir, te permitirán tener códigos, ejecutar esos códigos y hacer notas que acompañen la generación y ejecución de aquellos códigos, ¡todo en un mismo sitio! Los resultados luego se pueden compartir a través de un PDF o un HTML que luego puedes publicar en la web. De ese modo, puedes generar tu propio repositorio de códigos que puedes luego utiizar y replicar con otras bases de datos.

[De hecho, esta explicación que ahora estás leyendo… ¡fue generada desde un R Notebook que fue luego convertido en un archivo HTML!]


¿Cómo creo un nuevo R Notebook?

Es sencillo. Lo haces haciendo clic en File, luego en la opción New File y finalmente en R Notebook.

[Si es la primera vez que usas R Notebook, aparece un cuadro de diálogo. Debes hacer clic en Yes.]

Se generará en la esquina superior izquierda de la interfaz de RStudio un nuevo espacio de trabajo, el cual contendrá algunas líneas de texto y un código, inclusive. Borramos todo el contenido que aparece ahí. Una vez hecho ello, estamos listos para poder comenzar a trabajar.


El espacio de trabajo que se acaba de generar se conoce como Markdown. En este Markdown puede introducirse texto a manera de notas, así como código de R:

Ahora sí… una vez explicada la forma como procederemos en el uso de RStudio, empecemos a trabajar con nuestro Markdown.


¿Cómo abrimos un archivo de SPSS (.sav) en RStudio?

Lo hacemos introduciendo el siguiente código en nuestro Markdown [recuerda que líneas arriba te hemos indicado cómo introducir código en tu Markdown]:

library(foreign)
ejemplo<- read.spss("Comisarías de Lima.sav",use.value.labels=TRUE, max.value.labels=Inf, to.data.frame=TRUE)

Para correr el código debes dar clic en ‘Play’ [la flecha verde que aparece en la esquina superior derecha de cada código].

¿Cómo verificas que el código ha sido ejecutado de manera correcta? En este caso, dado que estamos cargando una base de SPSS, en realidad lo que hemos hecho es crear un objeto, llamado ejemplo, que contiene a nuestra base de datos. Si el código ha sido ejecutado correctamente, verás que bajo la pestaña Environment (esquina superior derecha de la ventana de RStudio) aparece ya creado un objeto llamado ejemplo. Al hacer clic veremos que junto a nuestro Markdown se abre una pestaña adicional que nos muestra la base de datos que acabamos de exportar desde SPSS.


Operaciones básicas

Una vez abierta nuestra data, podemos empezar a hacer algunas operaciones. Para ello, volvemos a nuestro Markdown. En lo que sigue, para cada nueva operación que hagamos, insertaremos nuevas líneas de código en nuestro Markdown [recuerda que previamente te hemos enseñado cómo introducir código en tu Markdown; inclusive, te mostramos un atajo].

Si deseo ver los nombres de las variables, lo hago con el comando names:

names(ejemplo)
##  [1] "N."                                      
##  [2] "Macroregion"                             
##  [3] "Regpol"                                  
##  [4] "Comisaria"                               
##  [5] "Departamento"                            
##  [6] "Provincia"                               
##  [7] "Distrito"                                
##  [8] "Electricidad_adecuada"                   
##  [9] "Agua_adecuada"                           
## [10] "Desague_adecuado"                        
## [11] "Indicador_de_servicios_básicos_adecuados"
## [12] "Paredes_adecuadas"                       
## [13] "Piso_adecuado"                           
## [14] "Techo_adecuado"                          
## [15] "Indicador_de_infraestructurada_adecuada" 
## [16] "Cantidad_de_efectivos"

[?No te olvides de ‘correr’ o ejecutar cada línea de código luego de haberla insertado! Ya te dijimos también cómo hacerlo.]

Para poder empezar describiendo nuestra data, vamos a instalar y activar el paquete Hmisc. En RStudio, podemos instalar un paquete de dos formas:

O bien:

Una vez instalado el paquete, lo activamos haciendo uso del comando library:

library(Hmisc)

Recuerda: la instalación de paquetes se hace solo una vez en la máquina en la que estás trabajando. Si anteriormente ya instalaste un paquete en tu computadora, este se quedará instalado y para usarlo, solo deberás activarlo usando el comando library.

Ahora sí, usamos el comando describe para empezar a describir la data:

str(ejemplo)
## 'data.frame':    113 obs. of  16 variables:
##  $ N.                                      : num  649 3 411 19 407 ...
##  $ Macroregion                             : chr  "LIMA         " "LIMA         " "LIMA         " "LIMA         " ...
##  $ Regpol                                  : chr  "LIMA         " "LIMA         " "LIMA         " "LIMA         " ...
##  $ Comisaria                               : chr  "CPNP SAN ISIDRO                            " "CPNP MAGDALENA                             " "CPNP SALAMANCA                             " "CPNP SAN MIGUEL                            " ...
##  $ Departamento                            : chr  "LIMA METROPOLITANA" "LIMA METROPOLITANA" "LIMA METROPOLITANA" "LIMA METROPOLITANA" ...
##  $ Provincia                               : chr  "LIMA                     " "LIMA                     " "LIMA                     " "LIMA                     " ...
##  $ Distrito                                : chr  "SAN ISIDRO                          " "MAGDALENA DEL MAR                   " "ATE                                 " "SAN MIGUEL                          " ...
##  $ Electricidad_adecuada                   : chr  "SI" "SI" "SI" "SI" ...
##  $ Agua_adecuada                           : chr  "SI" "SI" "SI" "SI" ...
##  $ Desague_adecuado                        : chr  "NO" "SI" "SI" "SI" ...
##  $ Indicador_de_servicios_básicos_adecuados: chr  "NO" "SI" "SI" "SI" ...
##  $ Paredes_adecuadas                       : chr  "NO" "NO" "NO" "SI" ...
##  $ Piso_adecuado                           : chr  "NO" "SI" "NO" "SI" ...
##  $ Techo_adecuado                          : chr  "NO" "SI" "NO" "SI" ...
##  $ Indicador_de_infraestructurada_adecuada : chr  "NO" "NO" "NO" "SI" ...
##  $ Cantidad_de_efectivos                   : num  9 12 15 27 29 30 32 33 34 41 ...
##  - attr(*, "variable.labels")= Named chr [1:16] "" "MACRO REGIÓN" "REGIÓN POLICIAL" "NOMBRE DE LA COMISARÍA" ...
##   ..- attr(*, "names")= chr [1:16] "N°" "Macroregion" "Regpol" "Comisaria" ...
##  - attr(*, "codepage")= int 65001
describe(ejemplo)
## ejemplo 
## 
##  16  Variables      113  Observations
## --------------------------------------------------------------------------------
## N. 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      113        0      113        1    471.7    441.8      7.6     13.4 
##      .25      .50      .75      .90      .95 
##     81.0    401.0    802.0   1142.2   1174.6 
## 
## lowest :    1    2    3    4    5, highest: 1189 1198 1205 1209 1212
## --------------------------------------------------------------------------------
## Macroregion 
##             n       missing      distinct         value 
##           113             0             1 LIMA          
##                
## Value      LIMA
## Frequency   113
## Proportion    1
## --------------------------------------------------------------------------------
## Regpol 
##             n       missing      distinct         value 
##           113             0             1 LIMA          
##                
## Value      LIMA
## Frequency   113
## Proportion    1
## --------------------------------------------------------------------------------
## Comisaria 
##        n  missing distinct 
##      113        0      113 
## 
## lowest : CPNP 10 DE OCTUBRE                          CPNP ALFONSO UGARTE                         CPNP ANCON                                  CPNP APOLO                                  CPNP BARBONCITOS                           
## highest: CPNP VILLA MARIA DEL TRIUNFO                CPNP VITARTE                                CPNP YERBATEROS                             CPNP ZAPALLAL                               CPNP ZARATE                                
## --------------------------------------------------------------------------------
## Departamento 
##                  n            missing           distinct              value 
##                113                  0                  1 LIMA METROPOLITANA 
##                              
## Value      LIMA METROPOLITANA
## Frequency                 113
## Proportion                  1
## --------------------------------------------------------------------------------
## Provincia 
##                         n                   missing                  distinct 
##                       113                         0                         1 
##                     value 
## LIMA                      
##                
## Value      LIMA
## Frequency   113
## Proportion    1
## --------------------------------------------------------------------------------
## Distrito 
##        n  missing distinct 
##      113        0       43 
## 
## lowest : ANCON                                ATE                                  BARRANCO                             BREÑA                                CARABAYLLO                          
## highest: SANTA ROSA                           SANTIAGO DE SURCO                    SURQUILLO                            VILLA EL SALVADOR                    VILLA MARIA DEL TRIUNFO             
## --------------------------------------------------------------------------------
## Electricidad_adecuada 
##        n  missing distinct    value 
##      113        0        1       SI 
##               
## Value       SI
## Frequency  113
## Proportion   1
## --------------------------------------------------------------------------------
## Agua_adecuada 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     14    99
## Proportion 0.124 0.876
## --------------------------------------------------------------------------------
## Desague_adecuado 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency      2   111
## Proportion 0.018 0.982
## --------------------------------------------------------------------------------
## Indicador_de_servicios_básicos_adecuados 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     15    98
## Proportion 0.133 0.867
## --------------------------------------------------------------------------------
## Paredes_adecuadas 
##        n  missing distinct 
##      113        0        2 
##                     
## Value        NO   SI
## Frequency    52   61
## Proportion 0.46 0.54
## --------------------------------------------------------------------------------
## Piso_adecuado 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     56    57
## Proportion 0.496 0.504
## --------------------------------------------------------------------------------
## Techo_adecuado 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     64    49
## Proportion 0.566 0.434
## --------------------------------------------------------------------------------
## Indicador_de_infraestructurada_adecuada 
##        n  missing distinct 
##      113        0        2 
##                     
## Value        NO   SI
## Frequency    78   35
## Proportion 0.69 0.31
## --------------------------------------------------------------------------------
## Cantidad_de_efectivos 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      113        0       75        1    82.05    36.45     31.2     47.2 
##      .25      .50      .75      .90      .95 
##     60.0     81.0    101.0    126.6    136.0 
## 
## lowest :   9  12  15  27  29, highest: 138 143 150 184 193
## --------------------------------------------------------------------------------

Vemos que obtenemos información de todas las variables, según la escala en la que se encuentra cada una.

Si quisiésemos tan solo obtener información de una variable, podemos agregar el signo $ (dolar) y el nombre de nuestra variable de interés inmediatamente después del nombre de nuestra data, de la siguiente manera:

describe(ejemplo$Indicador_de_infraestructurada_adecuada ) #información sobre la variable 'Cómo se considera usted políticamente'
## ejemplo$Indicador_de_infraestructurada_adecuada 
##        n  missing distinct 
##      113        0        2 
##                     
## Value        NO   SI
## Frequency    78   35
## Proportion 0.69 0.31

Para no estar escribiendo “describe” cada vez que queremos describir una variable de la data, podemos abreviar el código creando un objeto que contenga a la función describe aplicada sobre nuestra data. Lo hacemos de la siguiente manera:

d <- describe(ejemplo)

Una vez hecho esto, podemos describir cualquier variable de nuestro interés tan solo tipeando la letra d seguida del nombre de la variable expresada como un vector. Un vector es la concatenación de uno o más elementos del mismo tipo (números, caracteres, valores de verdad). Para concatenar elementos del mismo tipo en un vector, se usa el comando c.

Describamos, por ejemplo, la variable Cantidad_de_efectivos. Lo hacemos de la siguiente manera:

d[c('Cantidad_de_efectivos')] #Nótese el uso de los corchetes y de las comillas simples
## ejemplo 
## 
##  1  Variables      113  Observations
## --------------------------------------------------------------------------------
## Cantidad_de_efectivos 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      113        0       75        1    82.05    36.45     31.2     47.2 
##      .25      .50      .75      .90      .95 
##     60.0     81.0    101.0    126.6    136.0 
## 
## lowest :   9  12  15  27  29, highest: 138 143 150 184 193
## --------------------------------------------------------------------------------

Describamos ahora dos variables a la vez.

d[c('Cantidad_de_efectivos','Indicador_de_servicios_básicos_adecuados')] #Nótese el uso de la coma
## ejemplo 
## 
##  2  Variables      113  Observations
## --------------------------------------------------------------------------------
## Cantidad_de_efectivos 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      113        0       75        1    82.05    36.45     31.2     47.2 
##      .25      .50      .75      .90      .95 
##     60.0     81.0    101.0    126.6    136.0 
## 
## lowest :   9  12  15  27  29, highest: 138 143 150 184 193
## --------------------------------------------------------------------------------
## Indicador_de_servicios_básicos_adecuados 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     15    98
## Proportion 0.133 0.867
## --------------------------------------------------------------------------------

Pues bien, ya sabemos que con names obtenemos los nombres de todas las variables y que con el comando d que hemos creado podemos describir a una o más variables.

¿cómo hacemos si quisiésemos describir a todas nuestras variables, pero que estas aparezcan en orden alfabético??

Para ello, hacemos uso del comando sort, el cual ordenará alfabéticamente los nombres de nuestras variables (parecido al comando ‘Ordenar’ en Excel). Así, tenemos:

d[sort(names(d))]
## ejemplo 
## 
##  16  Variables      113  Observations
## --------------------------------------------------------------------------------
## Agua_adecuada 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     14    99
## Proportion 0.124 0.876
## --------------------------------------------------------------------------------
## Cantidad_de_efectivos 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      113        0       75        1    82.05    36.45     31.2     47.2 
##      .25      .50      .75      .90      .95 
##     60.0     81.0    101.0    126.6    136.0 
## 
## lowest :   9  12  15  27  29, highest: 138 143 150 184 193
## --------------------------------------------------------------------------------
## Comisaria 
##        n  missing distinct 
##      113        0      113 
## 
## lowest : CPNP 10 DE OCTUBRE                          CPNP ALFONSO UGARTE                         CPNP ANCON                                  CPNP APOLO                                  CPNP BARBONCITOS                           
## highest: CPNP VILLA MARIA DEL TRIUNFO                CPNP VITARTE                                CPNP YERBATEROS                             CPNP ZAPALLAL                               CPNP ZARATE                                
## --------------------------------------------------------------------------------
## Departamento 
##                  n            missing           distinct              value 
##                113                  0                  1 LIMA METROPOLITANA 
##                              
## Value      LIMA METROPOLITANA
## Frequency                 113
## Proportion                  1
## --------------------------------------------------------------------------------
## Desague_adecuado 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency      2   111
## Proportion 0.018 0.982
## --------------------------------------------------------------------------------
## Distrito 
##        n  missing distinct 
##      113        0       43 
## 
## lowest : ANCON                                ATE                                  BARRANCO                             BREÑA                                CARABAYLLO                          
## highest: SANTA ROSA                           SANTIAGO DE SURCO                    SURQUILLO                            VILLA EL SALVADOR                    VILLA MARIA DEL TRIUNFO             
## --------------------------------------------------------------------------------
## Electricidad_adecuada 
##        n  missing distinct    value 
##      113        0        1       SI 
##               
## Value       SI
## Frequency  113
## Proportion   1
## --------------------------------------------------------------------------------
## Indicador_de_infraestructurada_adecuada 
##        n  missing distinct 
##      113        0        2 
##                     
## Value        NO   SI
## Frequency    78   35
## Proportion 0.69 0.31
## --------------------------------------------------------------------------------
## Indicador_de_servicios_básicos_adecuados 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     15    98
## Proportion 0.133 0.867
## --------------------------------------------------------------------------------
## Macroregion 
##             n       missing      distinct         value 
##           113             0             1 LIMA          
##                
## Value      LIMA
## Frequency   113
## Proportion    1
## --------------------------------------------------------------------------------
## N. 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      113        0      113        1    471.7    441.8      7.6     13.4 
##      .25      .50      .75      .90      .95 
##     81.0    401.0    802.0   1142.2   1174.6 
## 
## lowest :    1    2    3    4    5, highest: 1189 1198 1205 1209 1212
## --------------------------------------------------------------------------------
## Paredes_adecuadas 
##        n  missing distinct 
##      113        0        2 
##                     
## Value        NO   SI
## Frequency    52   61
## Proportion 0.46 0.54
## --------------------------------------------------------------------------------
## Piso_adecuado 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     56    57
## Proportion 0.496 0.504
## --------------------------------------------------------------------------------
## Provincia 
##                         n                   missing                  distinct 
##                       113                         0                         1 
##                     value 
## LIMA                      
##                
## Value      LIMA
## Frequency   113
## Proportion    1
## --------------------------------------------------------------------------------
## Regpol 
##             n       missing      distinct         value 
##           113             0             1 LIMA          
##                
## Value      LIMA
## Frequency   113
## Proportion    1
## --------------------------------------------------------------------------------
## Techo_adecuado 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     64    49
## Proportion 0.566 0.434
## --------------------------------------------------------------------------------

Creando subconjuntos

Podemos usar el comando attach para que al momento de querer llamar a una variable ya no tengamos que estar escribiendo el nombre de la data junto al signo $ y el nombre de la variable.

Lo aplicamos a nuestra data:

attach(ejemplo)

Ahora, procedemos a crear un subconjunto de nuestra data seleccionando solo algunas variables que sean de nuestro interés.

subejemplo <- data.frame(Regpol,Comisaria,Indicador_de_servicios_básicos_adecuados,Indicador_de_infraestructurada_adecuada,Cantidad_de_efectivos) 

Nótese el uso del comando data.frame en el código. Este comando hace que el conjunto de variables con el que estamos constituyendo nuestro subconjunto sea convertido por R en un data frame o marco de datos. Un data frame o marco de datos es un conjunto de vectores de la misma longitud. R interpreta a la data con la que estamos trabajando (una base de datos con 16 variables y 113 casos) como un data frame compuesto de 16 vectores de longitud 113. En lo que acabamos de hacer, hemos usado el comando data.frame para decirle a R que interprete nuestro subconjunto de 4 variables como un data frame compuesto de 5 vectores de longitud 113.

Podemos quitar el efecto del comando attach usando la función detach. Como ya hicimos nuestro subconjunto, podemos aplicar este último comando a nuestra data:

detach(ejemplo)

[Eso quiere decir que si ahora queremos referirnos a una variable de nuestra data, deberemos hacerlo nuevamente de la siguiente manera: ejemplo$variable]


Ahora podemos hacer lo que ya hemos hecho antes a toda nuestra data solamente a nuestro subconjunto.

¿Cómo veo el nombre de las variables de mi subconjunto?

names(subejemplo)
## [1] "Regpol"                                  
## [2] "Comisaria"                               
## [3] "Indicador_de_servicios_básicos_adecuados"
## [4] "Indicador_de_infraestructurada_adecuada" 
## [5] "Cantidad_de_efectivos"

¿Cómo describo las variables de mi subconjunto?

describe(subejemplo)
## subejemplo 
## 
##  5  Variables      113  Observations
## --------------------------------------------------------------------------------
## Regpol 
##             n       missing      distinct         value 
##           113             0             1 LIMA          
##                
## Value      LIMA
## Frequency   113
## Proportion    1
## --------------------------------------------------------------------------------
## Comisaria 
##        n  missing distinct 
##      113        0      113 
## 
## lowest : CPNP 10 DE OCTUBRE                          CPNP ALFONSO UGARTE                         CPNP ANCON                                  CPNP APOLO                                  CPNP BARBONCITOS                           
## highest: CPNP VILLA MARIA DEL TRIUNFO                CPNP VITARTE                                CPNP YERBATEROS                             CPNP ZAPALLAL                               CPNP ZARATE                                
## --------------------------------------------------------------------------------
## Indicador_de_servicios_básicos_adecuados 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     15    98
## Proportion 0.133 0.867
## --------------------------------------------------------------------------------
## Indicador_de_infraestructurada_adecuada 
##        n  missing distinct 
##      113        0        2 
##                     
## Value        NO   SI
## Frequency    78   35
## Proportion 0.69 0.31
## --------------------------------------------------------------------------------
## Cantidad_de_efectivos 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      113        0       75        1    82.05    36.45     31.2     47.2 
##      .25      .50      .75      .90      .95 
##     60.0     81.0    101.0    126.6    136.0 
## 
## lowest :   9  12  15  27  29, highest: 138 143 150 184 193
## --------------------------------------------------------------------------------

Al haber realizado el subconjunto subejemplo a partir de la data ejemplo, todavía puedo aplicar el comando d (aplicado originalmente a la data ejemplo) para describir a las variables del subconjunto formado:

d[names(subejemplo)] #aquí el comando 'names' ayuda a filtrar aquellas únicas variables (las pertenecientes a mi subconjunto) que deberá considerar el comando 'd'
## ejemplo 
## 
##  5  Variables      113  Observations
## --------------------------------------------------------------------------------
## Regpol 
##             n       missing      distinct         value 
##           113             0             1 LIMA          
##                
## Value      LIMA
## Frequency   113
## Proportion    1
## --------------------------------------------------------------------------------
## Comisaria 
##        n  missing distinct 
##      113        0      113 
## 
## lowest : CPNP 10 DE OCTUBRE                          CPNP ALFONSO UGARTE                         CPNP ANCON                                  CPNP APOLO                                  CPNP BARBONCITOS                           
## highest: CPNP VILLA MARIA DEL TRIUNFO                CPNP VITARTE                                CPNP YERBATEROS                             CPNP ZAPALLAL                               CPNP ZARATE                                
## --------------------------------------------------------------------------------
## Indicador_de_servicios_básicos_adecuados 
##        n  missing distinct 
##      113        0        2 
##                       
## Value         NO    SI
## Frequency     15    98
## Proportion 0.133 0.867
## --------------------------------------------------------------------------------
## Indicador_de_infraestructurada_adecuada 
##        n  missing distinct 
##      113        0        2 
##                     
## Value        NO   SI
## Frequency    78   35
## Proportion 0.69 0.31
## --------------------------------------------------------------------------------
## Cantidad_de_efectivos 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      113        0       75        1    82.05    36.45     31.2     47.2 
##      .25      .50      .75      .90      .95 
##     60.0     81.0    101.0    126.6    136.0 
## 
## lowest :   9  12  15  27  29, highest: 138 143 150 184 193
## --------------------------------------------------------------------------------

Creando nuevas variables

Trabajemos con el subconjunto que hemos creado. Veamos cómo se está comportando la variable Cantidad_de_efectivos:

describe(subejemplo$Cantidad_de_efectivos)
## subejemplo$Cantidad_de_efectivos 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      113        0       75        1    82.05    36.45     31.2     47.2 
##      .25      .50      .75      .90      .95 
##     60.0     81.0    101.0    126.6    136.0 
## 
## lowest :   9  12  15  27  29, highest: 138 143 150 184 193

A partir de esto, podemos crear una nueva variable llamada comisarias_óptimas, la cual tendrá dos valores: , si es que la comisaría tiene más de 100 efectivos; No, si es que la comisaría tiene menos efectivos.

Para ello hacemos uso del comando ifelse, el cual tiene una lógica parecida al comando ‘Sí’ en Excel:

subejemplo$comisarias_óptimas <- ifelse(subejemplo$Cantidad_de_efectivos  > 100, c("Sí"), c("No")) 

Si hacemos clic sobre el objeto subejemplo vemos que hay una nueva columna compuesta por la nueva variable, comisarias_óptimas.

str(subejemplo)
## 'data.frame':    113 obs. of  5 variables:
##  $ Regpol                                  : chr  "LIMA         " "LIMA         " "LIMA         " "LIMA         " ...
##  $ Comisaria                               : chr  "CPNP SAN ISIDRO                            " "CPNP MAGDALENA                             " "CPNP SALAMANCA                             " "CPNP SAN MIGUEL                            " ...
##  $ Indicador_de_servicios_básicos_adecuados: chr  "NO" "SI" "SI" "SI" ...
##  $ Indicador_de_infraestructurada_adecuada : chr  "NO" "NO" "NO" "SI" ...
##  $ Cantidad_de_efectivos                   : num  9 12 15 27 29 30 32 33 34 41 ...

Ahora bien, podemos también agrupar la variable numérica en una variable categórica ordinal.

subejemplo$tamaño_comisaria[subejemplo$Cantidad_de_efectivos <= 50] <- "Pequeña"
subejemplo$tamaño_comisaria[subejemplo$Cantidad_de_efectivos > 50 & subejemplo$Cantidad_de_efectivos <= 100] <- "Mediana"
subejemplo$tamaño_comisaria[subejemplo$Cantidad_de_efectivos > 100] <- "Grande"

Si ahora hacemos clic sobre el objeto subejemplo en nuestro Environment, veremos que hay una nueva columna correspondiente a nuestra nueva variable de edad edadcat, la cual registra si la persona encuestada es joven, adulta o anciana.

Describimos la variable tamaño_comisaria:

describe(subejemplo$tamaño_comisaria)
## subejemplo$tamaño_comisaria 
##        n  missing distinct 
##      113        0        3 
##                                   
## Value       Grande Mediana Pequeña
## Frequency       29      68      16
## Proportion   0.257   0.602   0.142

Pidamos finalmente los nombres de todas las variables que tenemos ahora en nuestro subconjunto subejemplo:

names(subejemplo)
## [1] "Regpol"                                  
## [2] "Comisaria"                               
## [3] "Indicador_de_servicios_básicos_adecuados"
## [4] "Indicador_de_infraestructurada_adecuada" 
## [5] "Cantidad_de_efectivos"                   
## [6] "tamaño_comisaria"

Guardando los resultados

Si yo deseo guardar la base de datos generada a partir del subconjunto previamente elaborado, así como las nuevas variables que generé en mi subconjunto, tengo varias opciones para hacerlo.

Guardando los resultados en R

Si deseamos guardar la base de datos generada en formato de R, lo hacemos con el comando save:

save(subejemplo,file="subejemplo.rda")

Guardando los resultados en SPSS

Si deseamos guardar la base de datos generada en formato de SPSS, lo hacemos con el comando write_sav del paquete haven:

library(haven)
## Warning: package 'haven' was built under R version 4.3.3
write_sav(subejemplo, "subejemplo.sav")

Guardando los resultados en Excel

Si deseamos guardar la base de datos generada en formato .xlsx de Excel, lo hacemos con el comando write.xlsx del paquete openxlsx:

library(openxlsx)
## Warning: package 'openxlsx' was built under R version 4.3.3
write.xlsx(subejemplo, "subejemplo.xlsx")

También puedes guardar en el formato separado por comas que es más ligero y que también lo puedes abrir en Excel con el comando write.csv.

write.csv(subejemplo,file="subejemplo.csv")

Guardando los resultados en Stata

También podemos guardarlo en Stata con el comando write_dta del paquete haven:

#write_dta(subejemplo, "subejemplo.dta")

Por último vamos a tejer (knit) nuestros resultados en un archivo HTML, PDF y DOCX. Para ello necesitamos que todo nuestro código esté bien escrito (que no haya errores), y esté guardado. Esta opcion es clave para la comunicación de nuestros resultados. Para que pueda exportar los resultados en PDF es necesario tener LaTex (un software que permite crear archivos de texto). Para descargar el instalador que se adapta a tu sistema operativo puedes entrar a https://www.latex-project.org/get/ o puedes inslarlo desde el mismo RStudio con el siguiente código.

#tinytex::install_tinytex()

Espero que este Rmd de primeros pasos en el mundo del R te sea de mucha utilidad.Recuerda que puedes reciclarlo en cualquier momento.