class: center, middle .linea-superior[] .linea-inferior[] <img src="imagenes/logo_portada2.png" width="200" /> ## INE Educa: Clases abiertas de R ## Proyecto Ciencia de Datos ## Trabajo básico con columnas --- name: diapo-basica background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Trabajo básico con columnas --- template: diapo-basica Muchas veces las tablas con las que trabajamos contienen más columnas de las que necesitamos, por lo que nos interesa hacer una selección de estas. la función `select` nos ayudará en estas situaciones. .center[ <img src="imagenes/select.png" width="300" />] --- template: diapo-basica Para el ejemplo cargaremos la tabla `ejemplo_select.xlsx` ```r tabla = readxl::read_excel('data/ejemplo_select.xlsx') ``` <table> <thead> <tr> <th style="text-align:right;"> id </th> <th style="text-align:left;"> categoria_1 </th> <th style="text-align:left;"> categoria_2 </th> <th style="text-align:left;"> categoria_3 </th> <th style="text-align:left;"> comuna_1 </th> <th style="text-align:left;"> comuna_2 </th> <th style="text-align:left;"> comuna_3 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> A </td> <td style="text-align:left;"> B </td> <td style="text-align:left;"> C </td> <td style="text-align:left;"> La Serena </td> <td style="text-align:left;"> Valparaíso </td> <td style="text-align:left;"> Concepción </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:left;"> D </td> <td style="text-align:left;"> E </td> <td style="text-align:left;"> F </td> <td style="text-align:left;"> Navidad </td> <td style="text-align:left;"> Quilpué </td> <td style="text-align:left;"> Valdivia </td> </tr> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> G </td> <td style="text-align:left;"> H </td> <td style="text-align:left;"> I </td> <td style="text-align:left;"> Santiago </td> <td style="text-align:left;"> San Bernardo </td> <td style="text-align:left;"> Bulnes </td> </tr> <tr> <td style="text-align:right;"> 4 </td> <td style="text-align:left;"> J </td> <td style="text-align:left;"> K </td> <td style="text-align:left;"> L </td> <td style="text-align:left;"> Los Ángeles </td> <td style="text-align:left;"> Punta Arenas </td> <td style="text-align:left;"> Coyhaique </td> </tr> </tbody> </table> --- template: diapo-basica ¿Qué formas tenemos para seleccionar columnas? .panelset[ .panel[.panel-name[nombres] Por nombre: ```r tabla %>% select(id, categoria_1, categoria_2) ``` <table> <thead> <tr> <th style="text-align:right;"> id </th> <th style="text-align:left;"> categoria_1 </th> <th style="text-align:left;"> categoria_2 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> A </td> <td style="text-align:left;"> B </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:left;"> D </td> <td style="text-align:left;"> E </td> </tr> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> G </td> <td style="text-align:left;"> H </td> </tr> <tr> <td style="text-align:right;"> 4 </td> <td style="text-align:left;"> J </td> <td style="text-align:left;"> K </td> </tr> </tbody> </table> Seleccionamos columnas `id`, `categoria_1` y `categoria_2` ] .panel[.panel-name[posiciones] Por posición: ```r tabla %>% select(1, 2, 4) ``` <table> <thead> <tr> <th style="text-align:right;"> id </th> <th style="text-align:left;"> categoria_1 </th> <th style="text-align:left;"> categoria_3 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> A </td> <td style="text-align:left;"> C </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:left;"> D </td> <td style="text-align:left;"> F </td> </tr> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> G </td> <td style="text-align:left;"> I </td> </tr> <tr> <td style="text-align:right;"> 4 </td> <td style="text-align:left;"> J </td> <td style="text-align:left;"> L </td> </tr> </tbody> </table> En este caso seleccionamos las columnas n°1, 2 y 4, según el orden que tengan de izquierda a derecha ] .panel[.panel-name[rango] Por rango: ```r tabla %>% select(id:categoria_3) ``` <table> <thead> <tr> <th style="text-align:right;"> id </th> <th style="text-align:left;"> categoria_1 </th> <th style="text-align:left;"> categoria_2 </th> <th style="text-align:left;"> categoria_3 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> A </td> <td style="text-align:left;"> B </td> <td style="text-align:left;"> C </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:left;"> D </td> <td style="text-align:left;"> E </td> <td style="text-align:left;"> F </td> </tr> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> G </td> <td style="text-align:left;"> H </td> <td style="text-align:left;"> I </td> </tr> <tr> <td style="text-align:right;"> 4 </td> <td style="text-align:left;"> J </td> <td style="text-align:left;"> K </td> <td style="text-align:left;"> L </td> </tr> </tbody> </table> En este caso seleccionamos desde la columna `id` hasta `categoria_3`, según el orden que tengan de izquierda a derecha ] .panel[.panel-name[seleccion_negativa] Selección negativa: ```r tabla %>% select(-id, -categoria_2) ``` <table> <thead> <tr> <th style="text-align:left;"> categoria_1 </th> <th style="text-align:left;"> categoria_3 </th> <th style="text-align:left;"> comuna_1 </th> <th style="text-align:left;"> comuna_2 </th> <th style="text-align:left;"> comuna_3 </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> A </td> <td style="text-align:left;"> C </td> <td style="text-align:left;"> La Serena </td> <td style="text-align:left;"> Valparaíso </td> <td style="text-align:left;"> Concepción </td> </tr> <tr> <td style="text-align:left;"> D </td> <td style="text-align:left;"> F </td> <td style="text-align:left;"> Navidad </td> <td style="text-align:left;"> Quilpué </td> <td style="text-align:left;"> Valdivia </td> </tr> <tr> <td style="text-align:left;"> G </td> <td style="text-align:left;"> I </td> <td style="text-align:left;"> Santiago </td> <td style="text-align:left;"> San Bernardo </td> <td style="text-align:left;"> Bulnes </td> </tr> <tr> <td style="text-align:left;"> J </td> <td style="text-align:left;"> L </td> <td style="text-align:left;"> Los Ángeles </td> <td style="text-align:left;"> Punta Arenas </td> <td style="text-align:left;"> Coyhaique </td> </tr> </tbody> </table> Con la selección negativa seleccionamos todas las columnas menos las especificadas. En este caso, seleccionamos todas menos `id` y `categoria_2`. ] ] --- template: diapo-basica ## starts_with Si queremos seleccionar todas las columnas que empiecen con los mismos carácteres, podemos usar `starts_with()` dentro del `select()`. Obtengamos la columna id y todas las categorías: -- ```r tabla %>% select(id, starts_with('categoria')) ``` -- <table> <thead> <tr> <th style="text-align:right;"> id </th> <th style="text-align:left;"> categoria_1 </th> <th style="text-align:left;"> categoria_2 </th> <th style="text-align:left;"> categoria_3 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> A </td> <td style="text-align:left;"> B </td> <td style="text-align:left;"> C </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:left;"> D </td> <td style="text-align:left;"> E </td> <td style="text-align:left;"> F </td> </tr> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> G </td> <td style="text-align:left;"> H </td> <td style="text-align:left;"> I </td> </tr> <tr> <td style="text-align:right;"> 4 </td> <td style="text-align:left;"> J </td> <td style="text-align:left;"> K </td> <td style="text-align:left;"> L </td> </tr> </tbody> </table> --- template: diapo-basica ## ends_with También podríamos querer seleccionar las columnas que terminen con un conjunto de carácteres. En este caso usamos `ends_with()` dentro del `select()`. Obtengamos la columna id y todas las columnas terminadas en "_1": -- ```r tabla %>% select(id, ends_with('_1')) ``` -- <table> <thead> <tr> <th style="text-align:right;"> id </th> <th style="text-align:left;"> categoria_1 </th> <th style="text-align:left;"> comuna_1 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> A </td> <td style="text-align:left;"> La Serena </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:left;"> D </td> <td style="text-align:left;"> Navidad </td> </tr> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> G </td> <td style="text-align:left;"> Santiago </td> </tr> <tr> <td style="text-align:right;"> 4 </td> <td style="text-align:left;"> J </td> <td style="text-align:left;"> Los Ángeles </td> </tr> </tbody> </table> --- template: diapo-basica ## contains Por último, podríamos querer seleccionar las columnas que contengan un conjunto de carácteres. En este caso usamos `contains()` dentro del `select()`. Todas las columnas que contengan el caracter "_": -- ```r tabla %>% select(contains('_')) ``` -- <table> <thead> <tr> <th style="text-align:left;"> categoria_1 </th> <th style="text-align:left;"> categoria_2 </th> <th style="text-align:left;"> categoria_3 </th> <th style="text-align:left;"> comuna_1 </th> <th style="text-align:left;"> comuna_2 </th> <th style="text-align:left;"> comuna_3 </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> A </td> <td style="text-align:left;"> B </td> <td style="text-align:left;"> C </td> <td style="text-align:left;"> La Serena </td> <td style="text-align:left;"> Valparaíso </td> <td style="text-align:left;"> Concepción </td> </tr> <tr> <td style="text-align:left;"> D </td> <td style="text-align:left;"> E </td> <td style="text-align:left;"> F </td> <td style="text-align:left;"> Navidad </td> <td style="text-align:left;"> Quilpué </td> <td style="text-align:left;"> Valdivia </td> </tr> <tr> <td style="text-align:left;"> G </td> <td style="text-align:left;"> H </td> <td style="text-align:left;"> I </td> <td style="text-align:left;"> Santiago </td> <td style="text-align:left;"> San Bernardo </td> <td style="text-align:left;"> Bulnes </td> </tr> <tr> <td style="text-align:left;"> J </td> <td style="text-align:left;"> K </td> <td style="text-align:left;"> L </td> <td style="text-align:left;"> Los Ángeles </td> <td style="text-align:left;"> Punta Arenas </td> <td style="text-align:left;"> Coyhaique </td> </tr> </tbody> </table> --- template: diapo-basica ## rename Otra necesidad común es cambiar los nombres de las variables por unos más prácticos. Para esto utilizamos la función `rename` que tiene la siguiente sintaxis: ```r rename(data.frame, nombre_nuevo1 = nombre_viejo1, nombre_nuevo2 = nombre_viejo2, ...) ``` -- Probemos a renombrar las columnas de categorías a `cat_1`, `cat_2`, `cat_3`: ```r tabla %>% rename(cat_1 = categoria_1, cat_2 = categoria_2, cat_3 = categoria_3) ``` -- <table> <thead> <tr> <th style="text-align:right;"> id </th> <th style="text-align:left;"> cat_1 </th> <th style="text-align:left;"> cat_2 </th> <th style="text-align:left;"> cat_3 </th> <th style="text-align:left;"> comuna_1 </th> <th style="text-align:left;"> comuna_2 </th> <th style="text-align:left;"> comuna_3 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> A </td> <td style="text-align:left;"> B </td> <td style="text-align:left;"> C </td> <td style="text-align:left;"> La Serena </td> <td style="text-align:left;"> Valparaíso </td> <td style="text-align:left;"> Concepción </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:left;"> D </td> <td style="text-align:left;"> E </td> <td style="text-align:left;"> F </td> <td style="text-align:left;"> Navidad </td> <td style="text-align:left;"> Quilpué </td> <td style="text-align:left;"> Valdivia </td> </tr> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:left;"> G </td> <td style="text-align:left;"> H </td> <td style="text-align:left;"> I </td> <td style="text-align:left;"> Santiago </td> <td style="text-align:left;"> San Bernardo </td> <td style="text-align:left;"> Bulnes </td> </tr> <tr> <td style="text-align:right;"> 4 </td> <td style="text-align:left;"> J </td> <td style="text-align:left;"> K </td> <td style="text-align:left;"> L </td> <td style="text-align:left;"> Los Ángeles </td> <td style="text-align:left;"> Punta Arenas </td> <td style="text-align:left;"> Coyhaique </td> </tr> </tbody> </table> --- class: center, middle .linea-superior[] .linea-inferior[] <img src="imagenes/logo_portada2.png" width="200" /> ## INE Educa: Clases abiertas de R ## Proyecto Ciencia de Datos ## Trabajo básico con columnas