Clase-1 R y Rstudio
Clase-1 R y Rstudio
Clase-1 R y Rstudio
Hogares
EPH
Descipción de la encuesta, periodicidad y cobertura.
Información relevada en distintos cuestionarios
https://cran.r-project.org/
¿Que es R?
Lenguaje para el procesamiento y análisis estadístico de datos
Software Libre
Sintaxis Básica: R base
Sintaxis incremental1: El lenguaje se va ampliando por aportes de Universidades,
investigadores y empresas privadas, organizados en librerías (o paquetes)
Comunidad web muy grande para realizar preguntas y despejar dudas.
Graficos con calidad de publicación
fuente: https://gist.github.com/daroczig/3cf06d6db4be2bbe3368
https://www.rstudio.com/
Pantalla Rstudio
Gratuito
Únicamente funciona por líneas de código (No hay botones para ejecutar comandos)
Posibilita trabajar con múltiples bases de microdatos al mismo tiempo, sin mayor dificultad
(No requiere abrir cada base, trabajarla por separado y luego cerrarla)
Más potente
o Totalmente automatizable
o Aportes de usuarios
o Extensible a otros lenguajes y usos (Presentación como esta, diseño de aplicaciones)
Más veloz:
fuente: https://github.com/matthieugomez/benchmark-stata-r/blob/master/output/1e7.png
Lógica sintáctica.
Definición de objetos
Los Objetos/Elementos constituyen la categoría escencial del R. De hecho, todo en R es un objeto, y
se almacena con un nombre específico que no debe poseer espacios. Un número, un vector, una
función, la progresión de letras del abecedario, una base de datos, un gráfico, constituyen para R
objetos de distinto tipo. Los objetos que vamos creando a medida que trabajamos pueden visualizarse
en la panel derecho superior de la pantalla.
El operador <- sirve para definir un objeto. A la izquierda del <- debe ubicarse el nombre que
tomará el elemento a crear. Del lado derecho debe ir la definición del mismo
A <- 1
Al definir un elemento, el mismo queda guardado en el ambiente del programa, y podrá ser utilizado
posteriormente para observar su contenido o para realizar una operación con el mismo
A
[1] 1
A+6
[1] 7
Al correr una linea con el nombre del objeto, la consola del programa nos muestra su contenido.
Entre Corchetes Observamos el número de orden del elemento en cuestión
El operador = es equivalente a <-, pero en la práctica no se utiliza para la definición de objetos.
B=2
B
[1] 2
A <- B
A #Ahora A toma el valor de B, y B continua conservando el mismo valor
[1] 2
B
[1] 2
R base
Con R base nos referimos a los comandos básicos que vienen incorporados en el R, sin necesidad de
cargar librerías.
Operadores lógicos:
>>
>=>=
<<
<=<=
====
!=!=
#Redefinimos los valores A y B
A <- 10
B <- 20
#Realizamos comparaciones lógicas
A> B
[1] FALSE
A >= B
[1] FALSE
A< B
[1] TRUE
A <= B
[1] TRUE
A == B
[1] FALSE
A != B
[1] TRUE
C <- A != B
C
[1] TRUE
Como muestra el último ejemplo, el resultado de una operación lógica puede almacenarse como el
valor de un objeto.
Operadores aritméticos:
#suma
A <- 5+6
A
[1] 11
#Resta
B <- 6-8
B
[1] -2
#cociente
C <- 6/2.5
C
[1] 2.4
#multiplicacion
D <- 6*2.5
D
[1] 15
Funciones:
Las funciones son series de procedimientos estandarizados, que toman como imput determinados
argumentos a fijar por el usuario, y devuelven un resultado acorde a la aplicación de dichos
procedimientos. Su lógica de funcionamiento es:
funcion(argumento1 = arg1, argumento2 = arg2)
A lo largo del curso iremos viendo numerosas funciones, según lo requieran los distintos ejercicios.
Sin embargo, veamos ahora algunos ejemplos para comprender su funcionamiento:
paste() : concatena una serie de caracteres, indicando por última instancia como separar a cada
uno de ellos
paste0(): concatena una serie de caracteres sin separar
sum(): suma de todos los elementos de un vector
mean() promedio aritmético de todos los elementos de un vector
Caracteres especiales
R es sensible a mayúsculas y minúsculas, tanto para los nombres de las variables, como para
las funciones y parámetros.
Los espacios en blanco y los carriage return (enter) no son considerados por el lenguaje.
Los podemos aprovechar para emprolijar el código y que la lectura sea más simple2.
El numeral # se utiliza para hacer comentarios. Todo lo que se escribe después del # no es
interpretado por R. Se debe utilizar un # por cada línea de código que se desea anular
Los corchetes [] se utilizan para acceder a un objeto:
o en un vector[n° orden]
o en una tabla[fila, columna]
o en una lista[n° elemento]
el signo $ también es un método de acceso. Particularmente, en los dataframes, nos permitira
acceder a una determinada columna de una tabla
Los paréntesis() se utilizan en las funciones para definir los parámetros.
Las comas , se utilizan para separar los parametros al interior de una función.
Objetos:
Existen un gran cantidad de objetos distintos en R, en lo que resepcta al curso trabajaremos
principalmente con 3 de ellos:
Valores
Vectores
Data Frames
Listas
Valores
Los valores y vectores pueden ser a su vez de distintas clases:
Numeric
A <- 1
class(A)
[1] "numeric"
Character
A <- paste('Soy', 'una', 'concatenación', 'de', 'caracteres', sep = " ")
A
[1] "Soy una concatenación de caracteres"
class(A)
[1] "character"
Factor
A <- factor("Soy un factor, con niveles fijos")
class(A)
[1] "factor"
La diferencia entre un character y un factor es que el último tiene solo algunos valores permitidos (levels), con un orden
interno predefinido (el cual ,por ejemplo, se respetará a la hora de realizar un gráfico)
Vectores
Para crear un vector utilizamos el comando c(), de combinar.
C <- c(1, 3, 4)
C
[1] 1 3 4
C <- C + 2
C
[1] 3 5 6
E <- c("Carlos","Federico","Pedro")
E
[1] "Carlos" "Federico" "Pedro"
para acceder a algún elemento del vector, podemos buscarlo por su número de orden, entre [ ]
E[2]
[1] "Federico"
Si nos interesa almacenar dicho valor, al buscarlo lo asignamos a un nuevo objeto, dandole el nombre
que deseemos
rm(elemento2)
elemento2
Error: object 'elemento2' not found
También podemos cambiar el texto del segundo elemento de E, por el texto “Pablo”
Data Frames
Un Data Frame es una tabla de datos, donde cada columna representa una variable, y cada fila una
observación.
Este objeto suele ser central en el proceso de trabajo, y suele ser la forma en que se cargan datos
externos para trabajar en el ambiente de R, y en que se exportan los resultados de nuestros trabajo.
También Se puede crear como la combinación de N vectores de igual tamaño. Por ejemplo, tomamos
algunos valores del Indice de salarios
INDICE <- c(100, 100, 100,
101.8, 101.2, 100.73,
102.9, 102.4, 103.2)
FECHA <- c("Oct-16", "Oct-16", "Oct-16",
"Nov-16", "Nov-16", "Nov-16",
"Dic-16", "Dic-16", "Dic-16")
GRUPO <-
c("Privado_Registrado","Público","Privado_No_Registrado",
"Privado_Registrado","Público","Privado_No_Registrado",
"Privado_Registrado","Público","Privado_No_Registrado")
INDI FECH
CE A GRUPO
<dbl> <fctr> <fctr>
Datos$FECHA
[1] Oct-16 Oct-16 Oct-16 Nov-16 Nov-16 Nov-16 Dic-16 Dic-16 Dic-16
Levels: Dic-16 Nov-16 Oct-16
Datos[3,2]
[1] Oct-16
Levels: Dic-16 Nov-16 Oct-16
Datos$FECHA[3]
[1] Oct-16
Levels: Dic-16 Nov-16 Oct-16
Datos$FECHA[3,2]
Error in `[.default`(Datos$FECHA, 3, 2) : incorrect number of dimensions
Nótese que el último comando tiene un número incorrecto de dimensiones, porque estamos
refiriendonos 2 veces a la columna FECHA.
Acorde a lo visto anteriormente, el acceso a los dataframes mediante [ ], puede utilizarse para
realizar filtros sobre la base, especificando una condición para las filas. Por ejemplo, puedo utilizar
los [ ] para conservar del dataframe Datos unicamente los registros con fecha de Diciembre 2016:
Datos[Datos$FECHA=="Dic-16",]
INDI FEC
CE HA GRUPO
<dbl> <fctr> <fctr>
3 rows
La lógica del paso anterior sería: Accedo al dataframe Datos, pidiendo únicamente conservar las filas
(por eso la condición se ubica a la izquierda de la ,) que cumplan el requisito de pertenecer a la
categoría “Dic-16” de la variable FECHA.
Aún más, podría aplicar el filtro y al mismo tiempo identificar una variable de interés para luego
realizar un cálculo sobre aquella. Por ejemplo, podría calcular la media de los indices en el mes de
Diciembre.
###Por separado
Indices_Dic <- Datos$INDICE[Datos$FECHA=="Dic-16"]
Indices_Dic
[1] 102.9 102.4 103.2
mean(Indices_Dic)
[1] 102.8333
### Todo junto
mean(Datos$INDICE[Datos$FECHA=="Dic-16"])
[1] 102.8333
La lógica de esta sintaxis sería: “Me quedó con la variable INDICE, cuando la variable FECHA sea
igual a “Dic-16”, luego calculo la media de dichos valores”
Listas
Contienen una concatenación de objetos de cualquier tipo. Así como un vector contiene valores, un
dataframe contiene vectores, una lista puede contener dataframes, pero también vectores, o valores,
y todo ello a la vez
[[5]]
[1] "Carlos" "Pablo" "Pedro"
[[6]]
[1] "Oct-16" "Oct-16" "Oct-16" "Nov-16" "Nov-16" "Nov-16" "Dic-16" "Dic-16" "Dic-16"
$DF
INDI FECH
CE A GRUPO
<dbl> <fctr> <fctr>
16
9 rows
[[8]]
[1] 100.00 100.00 100.00 101.80 101.20 100.73 102.90 102.40 103.20
[[9]]
[1] "Privado_Registrado" "Público" "Privado_No_Registrado"
[4] "Privado_Registrado" "Público" "Privado_No_Registrado"
[7] "Privado_Registrado" "Público" "Privado_No_Registrado"
Para acceder un elemento de una lista, podemos utilizar el operador $, que se puede usar a su vez de
forma iterativa
superlista$DF$FECHA[2]
[1] Oct-16
Levels: Dic-16 Nov-16 Oct-16
install.packages("nombre_del_paquete")
Resulta recomendable ejecutar este comando desde la consola ya que solo necesitaremos correrlo
una vez en nuestra computadora. Al ejecutar el mismo, se descargarán de la pagina de CRAN los
archivos correspondientes al paquete hacia el directorio en donde hayamos instalado el programa.
Típicamente los archivos se encontrarán en **C:Files-3.5.0**, siempre con la versión del programa
correspondiente.
Una vez instalado el paquete, cada vez que abramos una nueva sesión de R y querramos utilizar el
mismo debemos cargarlo al ambiente de trabajo mediante la siguiente función:
library(nombre_del_paquete)
.csv y .txt
Hay muchas funciones para leer archivos de tipo .txt y .csv. La mayoría sólo cambia los parámetros
que vienen por default.
Es importante tener en cuenta que una base de datos que proviene de archivos .txt, o .csv puede
presentar diferencias en cuanto a los siguientes parametros:
encabezado
delimitador (,, tab, ;)
separador decimal
dataframe <- read.delim(file, header = TRUE, sep = "\t", quote = "\"", dec = ".", fill = TRUE, comment.char = "", ...)
TQRMNOQURHKOMLCDEFIAH004 2017 1 1 4
69284
TQRMNOQURHKOMLCDEFIAH004 2017 1 1 5
69284
TQRMNOQURHKOMLCDEFIAH004 2017 1 1 6
69284
TQRMNOQURHKOMLCDEFIAH004 2017 1 1 7
69284
TQRMNOQURHKOMLCDEFIAH004 2017 1 1 8
69284
TQRMNOQURHKOMLCDEFIAH004 2017 1 1 9
69284
TQRMNOQURHKOMLCDEFIAH004 2017 1 1 10
69284
ANO TRIMES NRO_HOG COMPONE
CODUSU 4 TRE AR NTE
<fctr> <int> <int> <int> <int>
TQRMNOQURHKOMLCDEFIAH004 2017 1 1 11
69284
TQRMNOQURHKOMLCDEFIAH004 2017 1 1 13
69284
TQRMNOQURHKOMLCDEFIAH004 2017 1 1 14
69284
Como puede observarse aquí, las bases individuales de la EPH cuentan con más de 58.000 registros y
177 variables. Al trabajar con bases de microdatos, resulta conveniente contar con algunos comandos
para tener una mirada rápida de la base, antes de comenzar a realizar los procesamientos que
deseemos.
Veamos algunos de ellos:
#View(individual_t117)
names(individual_t117)
[1] "CODUSU" "ANO4" "TRIMESTRE" "NRO_HOGAR" "COMPONENTE" "H15"
[7] "REGION" "MAS_500" "AGLOMERADO" "PONDERA" "CH03" "CH04"
[13] "CH05" "CH06" "CH07" "CH08" "CH09" "CH10"
[19] "CH11" "CH12" "CH13" "CH14" "CH15" "CH15_COD"
[25] "CH16" "CH16_COD" "NIVEL_ED" "ESTADO" "CAT_OCUP" "CAT_INAC"
[31] "IMPUTA" "PP02C1" "PP02C2" "PP02C3" "PP02C4" "PP02C5"
[37] "PP02C6" "PP02C7" "PP02C8" "PP02E" "PP02H" "PP02I"
[43] "PP03C" "PP03D" "PP3E_TOT" "PP3F_TOT" "PP03G" "PP03H"
[49] "PP03I" "PP03J" "INTENSI" "PP04A" "PP04B_COD" "PP04B1"
[55] "PP04B2" "PP04B3_MES" "PP04B3_ANO" "PP04B3_DIA" "PP04C" "PP04C99"
[61] "PP04D_COD" "PP04G" "PP05B2_MES" "PP05B2_ANO" "PP05B2_DIA" "PP05C_1"
[67] "PP05C_2" "PP05C_3" "PP05E" "PP05F" "PP05H" "PP06A"
[73] "PP06C" "PP06D" "PP06E" "PP06H" "PP07A" "PP07C"
[79] "PP07D" "PP07E" "PP07F1" "PP07F2" "PP07F3" "PP07F4"
[85] "PP07F5" "PP07G1" "PP07G2" "PP07G3" "PP07G4" "PP07G_59"
[91] "PP07H" "PP07I" "PP07J" "PP07K" "PP08D1" "PP08D4"
[97] "PP08F1" "PP08F2" "PP08J1" "PP08J2" "PP08J3" "PP09A"
[103] "PP09A_ESP" "PP09B" "PP09C" "PP09C_ESP" "PP10A" "PP10C"
[109] "PP10D" "PP10E" "PP11A" "PP11B_COD" "PP11B1" "PP11B2_MES"
[115] "PP11B2_ANO" "PP11B2_DIA" "PP11C" "PP11C99" "PP11D_COD" "PP11G_ANO"
[121] "PP11G_MES" "PP11G_DIA" "PP11L" "PP11L1" "PP11M" "PP11N"
[127] "PP11O" "PP11P" "PP11Q" "PP11R" "PP11S" "PP11T"
[133] "P21" "DECOCUR" "IDECOCUR" "RDECOCUR" "GDECOCUR" "PDECOCUR"
[139] "ADECOCUR" "PONDIIO" "TOT_P12" "P47T" "DECINDR" "IDECINDR"
[145] "RDECINDR" "GDECINDR" "PDECINDR" "ADECINDR" "PONDII" "V2_M"
[151] "V3_M" "V4_M" "V5_M" "V8_M" "V9_M" "V10_M"
[157] "V11_M" "V12_M" "V18_M" "V19_AM" "V21_M" "T_VI"
[163] "ITF" "DECIFR" "IDECIFR" "RDECIFR" "GDECIFR" "PDECIFR"
[169] "ADECIFR" "IPCF" "DECCFR" "IDECCFR" "RDECCFR" "GDECCFR"
[175] "PDECCFR" "ADECCFR" "PONDIH"
summary(individual_t117)[,c(8,10,31,133)]
head(individual_t117)[,1:5]
1 TQRMNOQURHKOMLCDEFIAH004 2017 1 1 4
69284
2 TQRMNOQURHKOMLCDEFIAH004 2017 1 1 5
69284
3 TQRMNOQURHKOMLCDEFIAH004 2017 1 1 6
69284
4 TQRMNOQURHKOMLCDEFIAH004 2017 1 1 7
69284
5 TQRMNOQURHKOMLCDEFIAH004 2017 1 1 8
69284
6 TQRMNOQURHKOMLCDEFIAH004 2017 1 1 9
69284
Excel
Para leer y escribir archivos excel debemos utilizar los comandos que vienen con la librería openxlsx
INDI FECH
CE A GRUPO
<dbl> <chr> <chr>
Ambientes de trabajo
Hay algunas cosas que tenemos que tener en cuenta respecto del orden del ambiente en el que
trabajamos:
Working Directory: El directorio de trabajo, pueden ver el suyo con getwd(), es hacia donde
apunta el código, por ejemplo, si quieren leer un archivo, la ruta del archivo tiene que estar
explicitada como el recorrido desde el Working Directory.
Environment: Esto engloba tanto la información que tenemos cargada en Data y Values, como
las librerías que tenemos cargadas mientras trabajamos.
Es importante que mantengamos bien delimitadas estas cosas entre diferentes trabajos, sino:
Rstudio tiene una herramienta muy útil de trabajo que son los proyectos. Estos permiten mantener un
ambiente de trabajo delimitado por cada uno de nuestros trabajos. Es decir:
logo Rpoject
Para crearlo, vamos al logo de nuevo projecto (Arriba a la izquierda de la panatalla), y elegimos la carpeta de trabajo.
install.packages(c("tidyverse","openxlsx",'ggplot2','ggthemes', 'ggrepel','ggalt','kableExtra'))
Ejercicios de tarea
Crear un nuevo script en la carpeta de la clase 1 nombrado “Nombre_Alumno_Tarea_C1.R”, y
realizar los siguientes procedimientos:
1. Más allá de los comandos elementales, comandos más sofisticados tienen muchas versiones, y
algunas quedan en desuso en el tiempo.↩
2. veremos que existen ciertas excepciones con algunos paquetes más adelante.↩