La función save() permite guardar un objeto en un archivo RData
# guardar un objeto (data frame) en formato Rsave(ech19, file = "data/ech19.RData")
La función save() permite guardar un objeto en un archivo RData
# guardar un objeto (data frame) en formato Rsave(ech19, file = "data/ech19.RData")
Debo escribir el argumento file de lo contrario me dará error porque no es el segundo argumento de la función. Allí especifico el nombre del archivo que voy a crear.
Adicionalmente puede incluir la ruta donde se creará el archivo. Si solo se define el nombre del archivo, se guarda en el directorio de trabajo actual: getwd()
La función save() permite guardar un objeto en un archivo RData
# guardar un objeto (data frame) en formato Rsave(ech19, file = "data/ech19.RData")
Debo escribir el argumento file de lo contrario me dará error porque no es el segundo argumento de la función. Allí especifico el nombre del archivo que voy a crear.
Adicionalmente puede incluir la ruta donde se creará el archivo. Si solo se define el nombre del archivo, se guarda en el directorio de trabajo actual: getwd()
La función save() permite guardar un objeto en un archivo RData
# guardar un objeto (data frame) en formato Rsave(ech19, file = "data/ech19.RData")
Debo escribir el argumento file de lo contrario me dará error porque no es el segundo argumento de la función. Allí especifico el nombre del archivo que voy a crear.
Adicionalmente puede incluir la ruta donde se creará el archivo. Si solo se define el nombre del archivo, se guarda en el directorio de trabajo actual: getwd()
load("data/ech19.RData")
¿Qué pasa si lo asigno a un objeto?
Es una nueva sesión así que no tengo los objetos en memoria que tenía ayer.
Voy a usar la función load() que viene en R-base.
load("/home/calcita/Desktop/ech19.RData") #cargo los datos
Nunca asigno a un objeto cuando uso la función load()
x <- c(-22, 4, -1, 8, NA)x
[1] -22 4 -1 8 NA
x <- c(-22, 4, -1, 8, NA)x
[1] -22 4 -1 8 NA
is.na(x)
[1] FALSE FALSE FALSE FALSE TRUE
sin_pobpcoac <- is.na(ech19$pobpcoac)
sin_pobpcoac <- is.na(ech19$pobpcoac)
pobpcoac
?table(sin_pobpcoac)
sin_pobpcoac FALSE 107871
sum(sin_pobpcoac)
[1] 0
El valor lógico TRUE representa al 1 y el valor FALSE representa al 0 por eso puedo usar la función sum().
La función duplicated() determina cuales elementos de un vector o data frame están duplicados, devuelve un vector lógico: TRUE si es duplicado y FALSE en caso contrario.
La función duplicated() determina cuales elementos de un vector o data frame están duplicados, devuelve un vector lógico: TRUE si es duplicado y FALSE en caso contrario.
x <- c(-22, 4, 8, 8, NA)x
[1] -22 4 8 8 NA
La función duplicated() determina cuales elementos de un vector o data frame están duplicados, devuelve un vector lógico: TRUE si es duplicado y FALSE en caso contrario.
x <- c(-22, 4, 8, 8, NA)x
[1] -22 4 8 8 NA
duplicated(x)
[1] FALSE FALSE FALSE TRUE FALSE
repetidos <- duplicated(ech19) # el argumento es el data framesum(repetidos) # los sumo, recordar: TRUE es 1 y FALSE es 0
[1] 0
repetidos <- duplicated(ech19$numero) # el argumento es una variablesum(repetidos)
[1] 65364
Si nombro a un objeto igual a uno existente, lo sobreescribo.
Todas las funciones del paquete tiene la particularidad de que su primer argumento es un data frame al que le realizará la operación, mientras que los subsiguiente argumentos describen como realizar tal operación.
Finalmente el resultado de todas estas funciones es un nuevo data frame. Esto no ocurre con las funciones de base.
# install.packages("dplyr") # ya lo tengo instalado
# install.packages("dplyr") # ya lo tengo instalado
library(dplyr)
Notar que en la función de instalación el nombre del paquete se escribe entre comillas pero en la función de carga va sin comillas. No hagas library("dplyr").
select
(<dataframe>, <variable>)
select
(<dataframe>, <variable>)
select(ech19, numero)
# A tibble: 107,871 x 1numero <chr> 1 20190000012 20190000013 20190000024 20190000025 20190000036 20190000037 20190000048 20190000049 201900000510 2019000005# … with 107,861 more rows
select(ech19, numero, nper)
# A tibble: 107,871 x 2numero nper<chr> <dbl>1 2019000001 12 2019000001 23 2019000002 14 2019000002 25 2019000003 16 2019000003 27 2019000004 18 2019000004 29 2019000005 110 2019000005 2# … with 107,861 more rows
Las funciones de tidyverse permiten llamar a las variables de un data frame sin usar comillas pero esto no es aplicable al resto de los paquetes de R, incluido los del base.
Seleccionar un rango de columnas: select(<df>, <desde>:<hasta>)
select(ech19, dpto:region_3)
Seleccionar todas las columnas menos una: select(<df>, -<variable>)
select(ech19, -nper)
slice
(<df>, <nro_fila>, <nro_fila>)
slice
(<df>, <nro_fila>, <nro_fila>)
# selecciono las filas 1 y 5slice(ech19, 1, 5)
# selecciono las filas de 1 a 5slice(ech19, 1:5)
filter
(<df>, <condicion>)
filter
(<df>, <condicion>)
mdeo <- filter(ech19, dpto == 1) # me quedo con los casos de Montevideohead(mdeo)
# A tibble: 6 x 9 numero nper dpto nomdpto region_3 e26 e27 ht19 pobpcoac <chr> <dbl> <dbl+lbl> <chr> <dbl+lbl> <dbl+l> <dbl> <dbl> <dbl+lbl>1 2019000… 1 1 [Montev… MONTEVI… 1 [Montev… 2 [Muj… 32 2 2 [Ocupado…2 2019000… 2 1 [Montev… MONTEVI… 1 [Montev… 1 [Hom… 9 2 1 [Menores…3 2019000… 1 1 [Montev… MONTEVI… 1 [Montev… 2 [Muj… 53 2 2 [Ocupado…4 2019000… 2 1 [Montev… MONTEVI… 1 [Montev… 2 [Muj… 13 2 1 [Menores…5 2019000… 1 1 [Montev… MONTEVI… 1 [Montev… 2 [Muj… 85 1 10 [Inactiv…6 2019000… 1 1 [Montev… MONTEVI… 1 [Montev… 2 [Muj… 45 1 2 [Ocupado…
Mayor que: >
filter(ech19, e27 > 90) # personas mayores de 90
Mayor igual que: >=
filter(ech19, e27 >= 90) # personas mayores de 90 o mas
Menor que: <
filter(ech19, e27 < 10)
Menor igual que: <=
filter(ech19, e27 <= 10)
Igual que: ==
filter(ech19, e27 == 90)
Diferente que: !=
filter(ech19, e27 != 90)
O lógico: |
# selecciono personas menores a 10 o mayores a 90filter(ech19, e27 < 10 | e27 > 90)
Y lógico: &
# selecciono menores a 10 y de Saltofilter(ech19, e27 < 10 & nomdpto == "FLORES")
Y lógico: &
# selecciono menores a 10 y de Saltofilter(ech19, e27 < 10 & nomdpto == "FLORES")
No lógico: !
# selecciono todas las personas que no tienen 90 filter(ech19, !e27 == 90)
# selecciono personas Durazno y Rochafilter(ech19, nomdpto %in% c("DURAZNO", "ROCHA"))
En este caso es lo mismo que:
# selecciono alojamientos menor a 60 y que el tipo sea Private room filter(ech19, nomdpto == "DURAZNO" | nomdpto == "ROCHA")
Selecciona los casos que tienen entre 3 y 5 años de edad y guarda en un objeto llamado menores_3_5
. La variable e27 es la edad.
Selecciona los casos cuya vivienda tiene 4 o 6 habitaciones y guarda en un objeto llamado habitaciones_4
. La variable d9 es el número de habitaciones.
ultimos_5
.
Selecciona un registro por hogar y guarda en un objeto llamado hogares
.
¿De cuál departamento es el hogar con mayor cantidad de personas? Ver ?slice_max
ech19 <- select(ech19, ht11, numero, nomdpto)
La función arrange() ordena un data frame de acuerdo a una(s) variable(s) de manera creciente por defecto.
ech19 <- select(ech19, ht11, numero, nomdpto)
La función arrange() ordena un data frame de acuerdo a una(s) variable(s) de manera creciente por defecto.
arrange(ech19, ht11)
ech19 <- select(ech19, ht11, numero, nomdpto)
La función arrange() ordena un data frame de acuerdo a una(s) variable(s) de manera creciente por defecto.
arrange(ech19, ht11)
Para ordenar de manera decreciente debo incluir la función desc():
arrange(ech19, desc(ht11))
ech19 <- select(ech19, ht11, numero, nomdpto)
La función arrange() ordena un data frame de acuerdo a una(s) variable(s) de manera creciente por defecto.
arrange(ech19, ht11)
Para ordenar de manera decreciente debo incluir la función desc():
arrange(ech19, desc(ht11))
Para ordenar por más de una variable:
arrange(ech19, desc(ht11), e27)
La función summarise() o summarize() calcula un resumen de variables
summarise(<df>, <column> = <function>(<variable>))
El resultado será una data frame con una fila, a menos que los datos estén agrupados, y una columna por cada estadístico de resumen.
summarise(ech19, promedio = mean(ht19))
mean
(), max
(), min
(), median
(), var
(), sd
(), sum
(), etc. Existen otras específicas de dplyr
que iremos viendo.# la función n() devuelve la cantidad de observacionessummarise(ech19, promedio = mean(ht19), varianza = var(ht19), total = n())
summarise(ech19, promedio = mean(ht19), varianza = var(ht19), total = n())
count(ech19, region_3)
# A tibble: 3 x 2 region_3 n <dbl+lbl> <int>1 1 [Montevideo] 382072 2 [Interior - Localidades de 5000 habitantes o más] 508543 3 [Interior - Localidades de menos de 5000 habitantes y zona ru] 18810
count(ech19, region_3, e26)
# A tibble: 6 x 3 region_3 e26 n <dbl+lbl> <dbl+lbl> <int>1 1 [Montevideo] 1 [Hombr… 173972 1 [Montevideo] 2 [Mujer] 208103 2 [Interior - Localidades de 5000 habitantes o más] 1 [Hombr… 238604 2 [Interior - Localidades de 5000 habitantes o más] 2 [Mujer] 269945 3 [Interior - Localidades de menos de 5000 habitantes y zona … 1 [Hombr… 93486 3 [Interior - Localidades de menos de 5000 habitantes y zona … 2 [Mujer] 9462
ech19 <- mutate(ech19, media_edad = mean(e27))head(ech19$media_edad)
[1] 39.87829 39.87829 39.87829 39.87829 39.87829 39.87829
La función case_when() permite calcular una nueva variable a partir de condicionar los valores de otra
ech19 <- mutate(ech19, mayor = case_when( e27 < 18 ~ "Menor", e27 >= 18 ~ "Mayor"))
# promedio de precio por barrioech19_gr <- group_by(ech19, nomdpto)summarise(ech19_gr, promedio = mean(ht19))
# A tibble: 19 x 2 nomdpto promedio <chr> <dbl> 1 ARTIGAS 3.70 2 CANELONES 3.38 3 CERRO LARGO 3.25 4 COLONIA 3.12 5 DURAZNO 3.68 6 FLORES 3.23 7 FLORIDA 3.19 8 LAVALLEJA 3.26 9 MALDONADO 3.2510 MONTEVIDEO 3.2111 PAYSANDU 3.4612 RIO NEGRO 3.4013 RIVERA 3.4314 ROCHA 3.1115 SALTO 3.8016 SAN JOSE 3.3917 SORIANO 3.4218 TACUAREMBO 3.4519 TREINTA Y TRES 3.24
summarise(group_by(ech19, nomdpto), promedio = mean(ht19))
# A tibble: 19 x 2 nomdpto promedio <chr> <dbl> 1 ARTIGAS 3.70 2 CANELONES 3.38 3 CERRO LARGO 3.25 4 COLONIA 3.12 5 DURAZNO 3.68 6 FLORES 3.23 7 FLORIDA 3.19 8 LAVALLEJA 3.26 9 MALDONADO 3.2510 MONTEVIDEO 3.2111 PAYSANDU 3.4612 RIO NEGRO 3.4013 RIVERA 3.4314 ROCHA 3.1115 SALTO 3.8016 SAN JOSE 3.3917 SORIANO 3.4218 TACUAREMBO 3.4519 TREINTA Y TRES 3.24
summarise(group_by(ech19, nomdpto), promedio = mean(ht19))
# A tibble: 19 x 2 nomdpto promedio <chr> <dbl> 1 ARTIGAS 3.70 2 CANELONES 3.38 3 CERRO LARGO 3.25 4 COLONIA 3.12 5 DURAZNO 3.68 6 FLORES 3.23 7 FLORIDA 3.19 8 LAVALLEJA 3.26 9 MALDONADO 3.2510 MONTEVIDEO 3.2111 PAYSANDU 3.4612 RIO NEGRO 3.4013 RIVERA 3.4314 ROCHA 3.1115 SALTO 3.8016 SAN JOSE 3.3917 SORIANO 3.4218 TACUAREMBO 3.4519 TREINTA Y TRES 3.24
%>%
.Calcular el promedio de edad según sexo.
Calcular la cantidad de jefas de hogar.
Permite ordenar los diferentes archivos de un análisis y prescindir de usar setwd() y/o escribir rutas larguísimas.
Si el archivo tesis.Rproj
está ubicado en: /home/calcita/Escritorio/tesis
, todos los archivos que estén en la carpeta tesis voy a poder cargarlos sin definir una ruta del archivo.
load("datos.csv")
Crear una carpeta llamada "Curso ECH"
Abrir Rstudio y crear un proyecto. Elegir como directorio la carpeta recién creada.
Crear un script de R donde guardaremos el código de este taller. Agregar a la carpeta los materiales del curso.
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |