Saltar al contenido principal
Si Usted continúa navegando en este sitio web, Usted está de acuerdo con nuestras políticas:
  • Aviso de privacidad simplificado
Continuar
x
Logo

Métodos Cuantitativos para Análisis Político I

  • Glosario
  • Tutoriales
  • Encuestas
  • Mesa de ayuda
  • Pantalla completa
  • Vista estándar
Glosario Tutoriales Encuestas Mesa de ayuda
  1. Cursos
  2. CSH
  3. Sociología
  4. Ciencia Política
  5. MCAP I
  6. Semana 8
  7. Crear subconjunto de datos (Quarto)

Crear subconjunto de datos (Quarto)

Requisitos de finalización

---

title: "MCAP1 - Cómo filtrar datos"

author: "DASR"

---


# Introducción al manejo de datos {dplyr}


<!--Original content: https://stat545.com/block009_dplyr-intro.html-->;


## Intro


[dplyr] es un paquete para el manejo de datos, desarrollado por Hadley Wickham y Romain Francois. Se instala como parte de [tidyverse][tidyverse-web] al cargar `library(tidyverse)`.


El origen de dplyr está en un paquete anterior llamado [plyr], que implementa el enfoque ["divide-aplica-combina" para análisis de datos]. El paquete dplyr se enfoca en conjunto de datos estructurados o "tibbles".



### Carga dplyr y gapminder


Primero, segúrate de cargar tidyverse, lo cual a su vez, descargará dplyr y otros paquetes que usaremos más adelante. También trabajaremos con una versión traducida de los datos precargados en tidyverse.


```{r start_dplyr}


library(tidyverse)


```


Carga el paquete con los datos traducidos.


```{r message = FALSE, warning = FALSE}


#install.packages("datos")

library(datos)

library(gapminder)


```


### Primeros tibble de `gapminder`


Los datos de `gapminder` tienen una estructura de datos particular:el tibble.


```{r}


gapminder


```

```{r}


#install.packages("datos")

#library(datos)

#datos


```



Para convertir cualquier conjunto de datos a tibble usa `as_tibble()`:


```{r}


as_tibble(iris)


```


## Antes de que crees secciones de tus datos...


Si piensas que sería buena idea extraer solo una parte de tus datos:


```{r}


(canada <- gapminder[241:252, ])


```


Pregúntate primero...


> ¿Quiero crear mini conjuntos de datos para cada nivel o factor de mis datos?


Si la respuesta es SÍ, __utiliza técnicas de agregación de datos__ o crea facetac con ggplot2 -- __no hagas subconjuntos de datos__. Puedes, de forma temporal, hacer subconjuntos de datos temporalmente en lo que desarrollas un código más rápido y elegante.


Si la respuesta es NO, probablemente realizar subconjuntos funcione para ti. Considera si puedes usar el argumento `subset =`.


LAs copias y sub conjuntos consumen espacio en tu ambiente de trabajo, pueden crear confusiones y generar errores. Evita en la medida de lo posible.



## Utiliza `filter()` para obtener un conjunto de datos por filas


`filter()` toma expresiones lógicas y devuelve filas donde dicha expresión es verdadera `TRUE`.


```{r}


filter(gapminder, lifeExp < 29)


filter(gapminder, country == "Rwanda", year > 1979)


filter(gapminder, country %in% c("Rwanda", "Afghanistan"))


```


Compara con código base de R que también realiza las mismas funciones:


```{r eval = FALSE}


gapminder[gapminder$lifeExp < 29, ] ## la repetición de `gapminder` puede confundir, [i, j] la forma de indexar distrae.


subset(gapminder, country == "Rwanda") ## similar a filter


```


Bajo ninguna circunstancia realices subconjuntos de datos como en el primer ejemplo:


```{r eval = FALSE}


excerpt <- gapminder[241:252, ]


```


¿Por qué es una mala idea?


* No nos dice nada acerca de los datos. Debes conocer perfectamente la base de datos para saber qué hay de especial en las filas 241 a 252?


* Es frágil en el sentido de que este código producirá resultados diferentes si alguien cambia el orden de las filas en `gapminder`, por ejemplo, si ordena los datos de mayor a menor en el script.


```{r eval = FALSE}


filter(gapminder, country == "Mexico")


```


En cambio, esta línea de código se explica a sí misma, sabemos que el filtro se está realizando por un determinado país.


## Conoce el operador *pipe*


Debemos conocer el operador *pipe* que utiliza tidyverse del paquete [magrittr] de Stefan Bache. Con este operador ya no es necesario anidar operaciones múltiples con comandos idem, como muñecas tradicionales rusas. El uso de este operador nos lleva a una nueva sintaxis que es más sencilla de escribir y de leer.


Este es el operador *pipe*: `%>%`. En RStudio utiliza la combinación de teclas: Ctrl+Shift+M (Windows), Cmd+Shift+M (Mac).



```{r}


gapminder %>% head()


```


Esto es equivalente a `head(gapminder)`. El operador toma la instrucción del lado izquierdo y lo lleva __pipes__ directo a la función de la derecha como si fuera el primer argumento.


Aún se pueden especificar otros argumentos en esta función, por ejemplo para ver las primeras 3 filas de`gapminder`, indicaríamos `head(gapminder, 3)` o, con *pipe*:


```{r}


gapminder %>% head(3)


```


En otros momentos te he aconsejado que pienses en "asignación" cuando ves el operador`<-`. De forma similar, te aconsejo que pienses "después o en consecuencia" cuando veas el operador *pipe* , `%>%`.


## Utiliza `select()` para hacer un subconjunto de datos en variables o columnas de tu interés.



Utiliza `select()` para hacer un subconjunto de datos:


```{r}


select(gapminder, year, lifeExp)


```


Esta es la misma operación pero escrita con el operador *pipe* y el comando`head()`:


```{r}


gapminder %>%


select(year, lifeExp) %>%


head(4)


```


La instrucción aquí es: "Toma `gapminder`, posteriormente selecciona las variables *year* y *lifeExp*, después muestra las primeras 4 filas."


## La conveniencia del operador *%>%* 


Estos son los datos para México, pero solo algunas variables:


```{r}


gapminder %>%


filter(country == "Mexico") %>%


select(year, lifeExp)


```


De esta forma se llamarían los mismos datos con R base:


```{r end_dplyr}


gapminder[gapminder$country == "Mexico", c("year", "lifeExp")]


```


## Funciones puras



> Funciones que se entienden facilmente y no tienen impacto en el ambiente de trabajo. Es decir, no tienen "efectos secundarios" más allá del valor que nos muestran.


El conjunto de datos es __siempre__ el primer argumento de las funciones verbo.Lo veremos a detalle más adelante.


logo CODAI

Coordinación de Apoyo a la Educación Mixta y Virtual

Resumen de conservación de datos
Políticas
Obtener la App Mobile