preloader

Análisis exploratorio de Datos - Parte I

blog-image

Cada base de datos es un problema diferente, con diversas variables y objetivos, por eso debe ser abordada de manera distinta

Sin embargo, cuando se va a trabajar con cualquier base de datos es obligatorio realizar un análisis de la base, tanto analítica como gráficamente; incluso si son entregados en “bandeja de plata”, siempre debemos corroborar su estructura e investigar su calidad. Realizando este análisis previo podremos:

  • Encontrar patrones.
  • Identificar errores.
  • Plantear nuevas hipótesis o preguntas.
  • Identificar relaciones entre variables.
  • Empezar a encontrar respuestas a nuestras preguntas de investigación.

En este análisis también podemos realizar procedimientos de creación o transformación de nuestras variables como la selección o filtrado de nuestras observaciones.

¡¡¡Atención, atención!!!

Debemos tener en cuenta que este análisis NO es un proceso formal con un conjunto estricto de reglas. Debes sentirte libre de investigar cada idea que se te ocurra. Algunas de estas ideas se desarrollarán y otras serán callejones sin salida.

En este post intentaremos darte herramientas que te permitirán analizar de una buena manera tus datos. Es importante considerar que este es un primer paso y no corresponde a un análisis estadístico riguroso, pero puede permitirte encontrar respuestas o guiarte en el tipo de análisis que quieres realizar.

Bien, entonces… ¡¡¡Empecemos a trabajar!!!


Primero, vamos a importar una base de datos llamada Datos. De este modo, lo primero que nos interesa saber es qué atributos contiene, cuántas observaciones hay, etc.

descarga


disper <- read.csv(choose.files())
head(disper)
##   sitio   disp_1   disp_2   disp_3
## 1     P 32.00000 26.66667 10.00000
## 2     P 11.33333 16.66667 10.00000
## 3     P 40.66667 40.00000 33.33333
## 4     P 26.00000 15.00000 13.33333
## 5     P 29.33333 18.33333  0.00000
## 6     P 34.00000 30.00000  6.66667

Información general

Lo primero que haremos es digitar funciones que anteriormente habíamos utilizado en nuestros otros POSTS, tales como class() y str().

# Muestra la clase de nuestra base
class(disper) 
## [1] "data.frame"
# Y de cada una de nuestras variables con la función lapply()
lapply(disper, class)
## $sitio
## [1] "character"
## 
## $disp_1
## [1] "numeric"
## 
## $disp_2
## [1] "numeric"
## 
## $disp_3
## [1] "numeric"
# Muestra la estructura de la base
str(disper)
## 'data.frame':    81 obs. of  4 variables:
##  $ sitio : chr  "P" "P" "P" "P" ...
##  $ disp_1: num  32 11.3 40.7 26 29.3 ...
##  $ disp_2: num  26.7 16.7 40 15 18.3 ...
##  $ disp_3: num  10 10 33.3 13.3 0 ...

Podemos observar que tenemos una base tipo data.frame, con 81 observaciones para cada una de las 4 variables en nuestra base de datos. Así, este conjunto de datos proporciona datos del sitio (character), dispersión salida 1 (integer), dispersión salida 2 (integer) y dispersión salida 3 (integer), datos tomados en un estudio sobre dispersion de semillas por escarabajos coprófagos.


Exploración del contenido

Ahora vamos a conocer más acerca de nuestros datos, para ello utilizaremos una serie de funciones que nos permiten hacer un análisis previo.

# Este comando nos permite conocer las dimensiones de la base de datos
# Como recordarás son 81 observaciones para 4 variables
dim(disper)
## [1] 81  4
# head() por defecto mostrará los 6 primeros datos
# Ahora queremos que muestre los 10 primeros datos
head(disper,10)
##    sitio   disp_1   disp_2   disp_3
## 1      P 32.00000 26.66667 10.00000
## 2      P 11.33333 16.66667 10.00000
## 3      P 40.66667 40.00000 33.33333
## 4      P 26.00000 15.00000 13.33333
## 5      P 29.33333 18.33333  0.00000
## 6      P 34.00000 30.00000  6.66667
## 7      P 11.33333 10.00000 13.33333
## 8      P 20.00000 30.00000 23.33333
## 9      P 49.33333 45.00000 43.33333
## 10    BM 78.00000 58.33333 83.33333
# tail() por defecto mostrará los 6 últimos datos
# Ahora queremos que muestre los 10 últimos datos
tail(disper,10)
##    sitio    disp_1    disp_2    disp_3
## 72   BM3  32.66667  21.66667  23.33333
## 73   BS3 100.00000 100.00000 100.00000
## 74   BS3  93.33333  68.33333  83.33333
## 75   BS3 100.00000 100.00000 100.00000
## 76   BS3 100.00000 100.00000 100.00000
## 77   BS3  87.33333  68.33333  86.66667
## 78   BS3  78.66667  60.00000  63.33333
## 79   BS3  92.66667  76.66667  73.33333
## 80   BS3  83.33333  71.66667  50.00000
## 81   BS3  78.66667  80.00000  70.00000

Al igual podemos utilizar la función unique() en la variable sitios para conocer los datos únicos que presenta dicha variable.

unique(disper$sitio)
## [1] "P"   "BM"  "BS"  "P2"  "BM2" "BS2" "P3"  "BM3" "BS3"

Como podemos observar el resultado generado son los valores únicos (“P”, “BM”, “BS”, “P2”, “BM2”, “BS2”, “P3”, “BM3”, “BS3”) para la variable “sitio”, los cuales fueron los sitios donde se tomaron los datos de dispersión.

Ten en cuenta que puedes ejecutar algunas de estas funciones en cualquier variable que desees, pero no siempre será necesario. Así que siempre pregúntate (en caso de que las utilices): ¿En que te va a ayudar en tu ejercicio? Así, no se volverá algo más que sabrás, y no será un tiro al aire que no te aportará nada.


Luego de obtener una información general de nuestro contenido, podemos realizar varias operaciones con nuestras variables, según las necesidades de nuestros proyectos; como te mencioné anteriormente, todo se puede realizar, pero no todo será necesario desarrollarlo, así que vamos a explorar un poco sobre ellas.

Operaciones con nuestras variables

A veces, la toma de datos no es suficiente para poder responder nuestras preguntas de investigación, por lo que las operaciones matemáticas suele ser un paso que muchos investigadores realizan. Por tanto, nosotros podemos realizar operaciones de suma, resta, potenciación, radicación, etc, etc, etc… ¡Veamos un ejemplo!

# Primero copiamos nuestra base a una nueva variable
oper <- disper

# En este ejemplo vamos a sobreescribir nuestros datos
# Sin embargo, NO te recomiendo que realices esto
oper$disp_1 <- oper$disp_1

# Mejor, te recomiendo crear una nueva variable y escribir los nuevos datos
oper$disp_4 <- oper$disp_2*2
head(oper)
##   sitio   disp_1   disp_2   disp_3   disp_4
## 1     P 32.00000 26.66667 10.00000 53.33334
## 2     P 11.33333 16.66667 10.00000 33.33334
## 3     P 40.66667 40.00000 33.33333 80.00000
## 4     P 26.00000 15.00000 13.33333 30.00000
## 5     P 29.33333 18.33333  0.00000 36.66666
## 6     P 34.00000 30.00000  6.66667 60.00000


Observa que hemos creado una nueva variable disp_4 a partir de nuestros datos, multiplicamos nuestra variable disp_2 por 2. Con esta orden la función va a tomar cada dato de la variable y aplicará la operación matemática establecida.

Rondeo de números

Otra operación importante es el redondeo de números. Lo primero que tenemos que saber es que existen distintas maneras (matemáticamente hablando), de redondear o truncar un valor. Esto con el fin de tener los datos según necesitemos, en pocas palabras… “Depende de…” Típica frase de bióloga/o!


Round

Nos devuelve un valor numérico decimal redondeado a los dígitos que le digamos. Es lo que podríamos llamar el redondeo clásico.

disperound <- disper

# Redondearemos a 2 cifras decimales nuestra variable disper_1
disperound$disp_1 <- round(disperound$disp_1, 2)
# Redondearemos a 1 cifra decimal nuestra variable disper_2
disperound$disp_2 <- round(disperound$disp_2, 1)
# Redondearemos a 0 cifras decimales nuestra variable disper_3
disperound$disp_3 <- round(disperound$disp_3, 0)

head(disperound)
##   sitio disp_1 disp_2 disp_3
## 1     P  32.00   26.7     10
## 2     P  11.33   16.7     10
## 3     P  40.67   40.0     33
## 4     P  26.00   15.0     13
## 5     P  29.33   18.3      0
## 6     P  34.00   30.0      7

Ceiling

Nos devuelve el próximo valor entero del número elegido. Siempre devuelve el entero posterior, excepto cuando sea exacto (es decir, salta al próximo número entero desde el primer decimal).

dispercei <- disper

dispercei$disp_1 <- ceiling(dispercei$disp_1)

head(dispercei)
##   sitio disp_1   disp_2   disp_3
## 1     P     32 26.66667 10.00000
## 2     P     12 16.66667 10.00000
## 3     P     41 40.00000 33.33333
## 4     P     26 15.00000 13.33333
## 5     P     30 18.33333  0.00000
## 6     P     34 30.00000  6.66667

Trunc / Floor

Esto es básicamente lo que conocemos matemáticamente como truncar un valor. Es decir, deja literalmente el número entero.

dispertrunc <- disper
disperfloor <- disper

dispertrunc$disp_1 <- trunc(dispertrunc$disp_1)
head(dispertrunc)
##   sitio disp_1   disp_2   disp_3
## 1     P     32 26.66667 10.00000
## 2     P     11 16.66667 10.00000
## 3     P     40 40.00000 33.33333
## 4     P     26 15.00000 13.33333
## 5     P     29 18.33333  0.00000
## 6     P     34 30.00000  6.66667
disperfloor$disp_1 <- floor(disperfloor$disp_1)
head(disperfloor)
##   sitio disp_1   disp_2   disp_3
## 1     P     32 26.66667 10.00000
## 2     P     11 16.66667 10.00000
## 3     P     40 40.00000 33.33333
## 4     P     26 15.00000 13.33333
## 5     P     29 18.33333  0.00000
## 6     P     34 30.00000  6.66667

Otras modificaciones

Luego de modificar nuestros datos podemos realizar unas pequeñas modificaciones para no perdernos en nuestros propios pensamientos y datos, primero los nombres, este cambio lo podemos realizar con la función rename()!


dispername <- disper

# Con esta función sabremos los nombres de nuestra variables
names(dispername)
## [1] "sitio"  "disp_1" "disp_2" "disp_3"
# Y podemos modificarlos según lo que necesitemos
dispername <- rename(dispername, Lugares = sitio, Salida1 = disp_1,
                 Salida2 = disp_2, Salida3 = disp_3)
names(dispername)
## [1] "Lugares" "Salida1" "Salida2" "Salida3"

Finalizado el análisis y modificación de nuestros datos, según nuestras necesidades, vamos a proceder a realizar una breve descripción estadística de estos datos, con el fin de describir los datos de una manera cuantitativa y tener una idea de lo que podemos o no podemos hacer con ellos.


Estadística descriptiva

Para realizar un análisis de estadística descriptiva hay múltiples funciones, en este post abarcaremos las principales.

¡¡¡Atención, atención!!!

Si no tienes claros conceptos básicos de la estadística te invitamos a que leas un poco sobre ellos, ¡la idea es que no te enloquezcas leyendo este post!
# Muestra el valor mínimo existente en el vector
# na.rm = TRUE - Si hay presentes NAs mostrará el valor mínimo numérico
# na.rm = FALSE - Si hay presentes NAs mostrará NA
min(disper$disp_1, na.rm = TRUE)
## [1] 11.33333
# Valor máximo
max(disper$disp_1, na.rm = TRUE)
## [1] 100
# Valor mínimo y máximo
range(disper$disp_1, na.rm = TRUE)
## [1]  11.33333 100.00000
# Valor de la media
mean(disper$disp_1, na.rm = TRUE)
## [1] 61.1358
# Valor de la varianza
var(disper$disp_1, na.rm = TRUE)
## [1] 817.0605
# Valor de la desviación estándar
sd(disper$disp_1, na.rm = TRUE)
## [1] 28.58427
# Valor de la mediana
median(disper$disp_1, na.rm = TRUE)
## [1] 71.33333
# Valores de quantiles
quantile(disper$disp_1, na.rm = TRUE)
##        0%       25%       50%       75%      100% 
##  11.33333  32.66667  71.33333  83.33333 100.00000

Ahora utilizaremos la función summary() la cual genera un resumen de nuestros datos de las funciones anteriormente mencionadas. Para variables numéricas se generan estadísticos básicos, como la media, mediana y cuartiles. Para variables cualitativas se generará un conteo de apariciones para cada posible valor.

summary(disper)
##     sitio               disp_1           disp_2           disp_3      
##  Length:81          Min.   : 11.33   Min.   : 10.00   Min.   :  0.00  
##  Class :character   1st Qu.: 32.67   1st Qu.: 30.00   1st Qu.: 23.33  
##  Mode  :character   Median : 71.33   Median : 58.33   Median : 50.00  
##                     Mean   : 61.14   Mean   : 54.75   Mean   : 52.96  
##                     3rd Qu.: 83.33   3rd Qu.: 76.67   3rd Qu.: 83.33  
##                     Max.   :100.00   Max.   :100.00   Max.   :100.00

Aunque usando todas las funciones antes descritas, podemos explorar el contenido de cualquier base de datos y obtener una visión general sobre su estructura, esta es una tarea que puede simplificarse enormemente gracias a funciones como describe(), que se encuentra en el paquete Hmisc.


Esta función nos mostrará un resumen de cada una de las variables de nuestra base de datos, en la cual podemos ver valores de máximos, mínimos, medias, valores únicos, proporciones de estos valores, entre otros, tal y como observamos en el siguiente ejemplo:

library(Hmisc)
describe(disper)
## disper 
## 
##  4  Variables      81  Observations
## --------------------------------------------------------------------------------
## sitio 
##        n  missing distinct 
##       81        0        9 
## 
## lowest : BM  BM2 BM3 BS  BS2, highest: BS2 BS3 P   P2  P3 
##                                                                 
## Value         BM   BM2   BM3    BS   BS2   BS3     P    P2    P3
## Frequency      9     9     9     9     9     9     9     9     9
## Proportion 0.111 0.111 0.111 0.111 0.111 0.111 0.111 0.111 0.111
## --------------------------------------------------------------------------------
## disp_1 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##       81        0       22    0.997    61.14    32.75    11.33    20.00 
##      .25      .50      .75      .90      .95 
##    32.67    71.33    83.33   100.00   100.00 
## 
## lowest :  11.33333  20.00000  26.00000  29.33333  32.00000
## highest:  83.33333  87.33333  92.66667  93.33333 100.00000
## --------------------------------------------------------------------------------
## disp_2 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##       81        0       21    0.996    54.75    31.84    15.00    16.67 
##      .25      .50      .75      .90      .95 
##    30.00    58.33    76.67   100.00   100.00 
## 
## lowest :  10.00000  15.00000  16.66667  18.33333  21.66667
## highest:  76.66667  80.00000  83.33333  86.66667 100.00000
## --------------------------------------------------------------------------------
## disp_3 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##       81        0       16    0.993    52.96    36.74    6.667   10.000 
##      .25      .50      .75      .90      .95 
##   23.333   50.000   83.333  100.000  100.000 
## 
## lowest :   0.00000   6.66667  10.00000  13.33333  23.33333
## highest:  73.33333  76.66667  83.33333  86.66667 100.00000
## 
## 0 (3, 0.037), 6.66667 (3, 0.037), 10 (6, 0.074), 13.33333 (6, 0.074), 23.33333
## (6, 0.074), 33.33333 (3, 0.037), 43.33333 (6, 0.074), 46.66667 (6, 0.074), 50
## (3, 0.037), 63.33333 (6, 0.074), 70 (3, 0.037), 73.33333 (3, 0.037), 76.66667
## (3, 0.037), 83.33333 (12, 0.148), 86.66667 (3, 0.037), 100 (9, 0.111)
## --------------------------------------------------------------------------------

Bien, ya conociendo un poco de un análisis estadístico previo de nuestras variables y conociendo como se comportan y que naturaleza tienen, vamos a conocer otras funciones muy especiales que serán fundamentales para tratar nuestros datos; funciones que nos permitirán realizar modificaciones pertinentes y dejar nuestros datos listos.

Verbos dplyr


El paquete dplyr posee un conjunto de funciones de manipulación de datos que proporciona un conjunto consistente de verbos que te ayudan a resolver los desafíos más comunes de manipulación de datos.

# Recuerda siempre cargar tus paquetes para trabajar con ellos
library(dplyr)

Entre ellas encontramos las siguientes:

  1. select() elige variables basadas en sus nombres.
  2. filter() elige los casos en función de sus valores.
  3. arrange() cambia el orden de las filas.
  4. mutate agrega nuevas variables que son funciones de variables existentes.
  5. group_by() agrupa un conjunto de filas seleccionado en un conjunto de filas de resumen.


Todos los verbos funcionan de manera similar:

  • El primer argumento es un marco de datos.
  • Los siguientes argumentos describen qué hacer con el marco de datos, utilizando los nombres de las variables (sin comillas).
  • El resultado es un nuevo marco de datos.

Estas funciones juntas, facilitan la encadenación de varios pasos sencillos para lograr un resultado complejo. Profundicemos y veamos cómo funcionan estos verbos.


select()

Cuando tenemos muchas variables en nuestra base de datos, pero solo necesitamos trabajar con un subconjunto de ellas, podemos seleccionar un subconjunto de variables de nuestra base de datos a través del uso de la función select() del paquete dplyr

## Tenemos dos formas

# La primera es elegir las variables que necesitamos 
selec <- select(disper, sitio, disp_3)
head(selec)
##   sitio   disp_3
## 1     P 10.00000
## 2     P 10.00000
## 3     P 33.33333
## 4     P 13.33333
## 5     P  0.00000
## 6     P  6.66667
# La segunda es especificar las variables que NO necesitamos
selec2 <- select(disper, -(disp_1))
head(selec2)
##   sitio   disp_2   disp_3
## 1     P 26.66667 10.00000
## 2     P 16.66667 10.00000
## 3     P 40.00000 33.33333
## 4     P 15.00000 13.33333
## 5     P 18.33333  0.00000
## 6     P 30.00000  6.66667

Como ves, ahora sólo tendremos las variables con la cual podremos trabajar de manera más sencilla, sin todos esos demás datos.

filter()

El filtrado se utiliza con el fin de seleccionar un subconjunto del data.frame que contiene nuestros datos. El uso básico del filtro se hace mediante la función filter()

Para usar el filtrado de manera efectiva, se debe saber cómo seleccionar las observaciones que se desean, utilizando los operadores de comparación. R proporciona el paquete estándar:


Acá te presentamos un pequeño gráfico del funcionamiento de los operadores & y |


Ahora, veamos un ejemplo de filtrado con nuestra base.

# Filtramos para tener únicamente los valores del sitio "P"
filt1 <- filter(disper, sitio == "P")
unique(filt1$sitio)
## [1] "P"
# Filtramos los datos menores a 50 en "disp_1"
filt2 <- filter(disper, disp_1 < 50)
summary(filt2$disp_1)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   11.33   20.00   32.00   30.55   40.67   49.33
# Al igual podemos guardar el filtrado en una nueva variable
# Con dos términos de filtrado
filt3 <- filter(disper, disp_3 < 75, sitio != "P")
summary(filt3$disp_1)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   11.33   32.00   49.33   51.42   78.67   92.67
unique(filt3$sitio)
## [1] "BM"  "BS"  "P2"  "BM2" "BS2" "P3"  "BM3" "BS3"

Así, podemos ver que se realizó nuestro filtrado correctamente y nuestra nueva variable tiene 24 observaciones para 4 variables.

arrange()

Otro proceso muy habitual es reordenar las filas de nuestros datos. Esto se usa cuando queremos inspeccionar un conjunto de datos para buscar asociaciones entre las diferentes variables, lo que resulta difícil de hacer si no están ordenados. Para realizar la ordenación se utiliza la función arrange(), como vemos a continuación:

# Ordenaremos de mayor a menor cada una de las variables
ord <- arrange(disper, sitio, disp_1, disp_2, disp_3)

# Ordenaremos de menor a mayor únicamente la variable disp_2 
ord2 <- arrange(disper, desc(disp_2))

mutate()

En la creación de variables a partir de las originales de nuestros datos tenemos dos opciones:

  1. Crear una nueva variable sin eliminar las variables originales
  2. Crear una nueva variable eliminando las variables originales.

Así para nuestra primera opción (NO eliminar nuestras variables originales), usamos la función mutate(), como vemos a continuación:

# Primero seleccionamos las variables que queremos trabajar
sel <- select(disper, disp_1, disp_2, disp_3)
mut <- mutate(sel, prom = ((disp_1 + disp_2 + disp_3)/3))
head(mut)
##     disp_1   disp_2   disp_3     prom
## 1 32.00000 26.66667 10.00000 22.88889
## 2 11.33333 16.66667 10.00000 12.66667
## 3 40.66667 40.00000 33.33333 38.00000
## 4 26.00000 15.00000 13.33333 18.11111
## 5 29.33333 18.33333  0.00000 15.88889
## 6 34.00000 30.00000  6.66667 23.55556

Y listo, tenemos nuestra nueva variable (prom), la cual es un promedio de las tres variables de dispersión.

Sin embargo, para nuestra segunda opción (eliminar nuestras variables originales), usamos la función transmute(), en la cual solo veremos la variable resultante como vemos a continuación (caso que NO te recomendamos, ¡después se arma tremendo lío!)

sel <- select(disper, disp_1, disp_2, disp_3)
tmut <- transmute(sel, prom = ((disp_1 + disp_2 + disp_3)/3))
head(tmut)
##       prom
## 1 22.88889
## 2 12.66667
## 3 38.00000
## 4 18.11111
## 5 15.88889
## 6 23.55556

group_by()

La función group_by es usada para agrupar datos según una variable, como vemos en este código:

ejemgroup <- group_by(disper, sitio)
ejemgroup
## # A tibble: 81 x 4
## # Groups:   sitio [9]
##    sitio disp_1 disp_2 disp_3
##    <chr>  <dbl>  <dbl>  <dbl>
##  1 P       32     26.7  10   
##  2 P       11.3   16.7  10   
##  3 P       40.7   40    33.3 
##  4 P       26     15    13.3 
##  5 P       29.3   18.3   0   
##  6 P       34     30     6.67
##  7 P       11.3   10    13.3 
##  8 P       20     30    23.3 
##  9 P       49.3   45    43.3 
## 10 BM      78     58.3  83.3 
## # ... with 71 more rows

Pero, la función group_by() es extremadamente útil trabajando en conjunto con la función summarise(), por lo que recomendamos que siempre se tengan en cuenta ambas funciones, eso sí, utilizando funciones estadísticas como veremos a continuación:

summarise(ejemgroup, mean(disp_1), min(disp_2), min(disp_3))
## # A tibble: 9 x 4
##   sitio `mean(disp_1)` `min(disp_2)` `min(disp_3)`
##   <chr>          <dbl>         <dbl>         <dbl>
## 1 BM              64.7          21.7          23.3
## 2 BM2             64.7          21.7          23.3
## 3 BM3             64.7          21.7          23.3
## 4 BS              90.4          60            50  
## 5 BS2             90.4          60            50  
## 6 BS3             90.4          60            50  
## 7 P               28.2          10             0  
## 8 P2              28.2          10             0  
## 9 P3              28.2          10             0

Como vemos, en las variables utilizamos funciones estadísticas como la media, mínimo y máximo. Siéntete libre de elegir las que creas pertinentes y respondan a tus preguntas. Ten presente que esto solo es un acercamiento a todo lo que podemos llegar a realizar, hay muuuuuuchas funciones y operaciones por hacer. Por ejemplo, una de ellas es la utilización de los pipeline, ¿Qué es? ¡Veamoslo a continuación!

Combinando operaciones con pipeline (%>%)

El operador pipeline %>% es útil para concatenar/unir múltiples operaciones dplyr.


Este operador nos permite escribir una secuencia de operaciones de izquierda a derecha, como vemos a continuación:

¡¡¡Atención, atención!!!

El atajo de teclado para el operador %>% es
# Se puede realizar esta operación de la manera tradicional
ejem1 <- select(disper, disp_1, disp_2)
head(ejem1)
##     disp_1   disp_2
## 1 32.00000 26.66667
## 2 11.33333 16.66667
## 3 40.66667 40.00000
## 4 26.00000 15.00000
## 5 29.33333 18.33333
## 6 34.00000 30.00000
# Utilizando pipeline obtenemos el mismo resultado
ejempipe <- disper %>% select(disp_1, disp_2)
head(ejempipe)
##     disp_1   disp_2
## 1 32.00000 26.66667
## 2 11.33333 16.66667
## 3 40.66667 40.00000
## 4 26.00000 15.00000
## 5 29.33333 18.33333
## 6 34.00000 30.00000

Esto quiere decir que el primer paso es llamar a la base de datos que consideremos y luego agregamos las funciones que necesitemos mediante el pipeline! Si, todas las que nos imaginemos, mira como queda este código:

ejempipe2 <- disper %>% 
            select(disp_1, disp_2)%>%
            filter(disp_1<20)%>% 
            arrange(disp_2)%>%
            mutate(promedio = ((disp_1 + disp_2)/2))
ejempipe2
##     disp_1   disp_2 promedio
## 1 11.33333 10.00000 10.66667
## 2 11.33333 10.00000 10.66667
## 3 11.33333 10.00000 10.66667
## 4 11.33333 16.66667 14.00000
## 5 11.33333 16.66667 14.00000
## 6 11.33333 16.66667 14.00000

Así, obtenemos un conjunto de datos completo con los elementos que ingresamos con alguno de los verbos dplyr en un sólo código con la ayuda del pipeline.

¡¡¡Pa’ finalizar!!!


Como ves, no es una receta, hay múltiples caminos y cada uno de puede acercar o alejar de tu objetivo. En este punto, es útil considerar algunas preguntas para que comprendas que andas haciendo.

¿Tienes los datos correctos?, ¿Tienes la pregunta correcta?, ¿Necesitas otros datos?

¡Siempre pregúntate que andas haciendo y si ese camino te lleva hacía donde quieres ir! (Aplica para la vida con condiciones y restricciones, lee la letra pequeña).


Es importante ya que puedes simplemente estar haciendo cosas que no tendrán ningún sentido y únicamente perderás tiempo y neuronas. Agárrala suave, respira y revisa en donde estás parado y si eso responde tu pregunta; sino, agarra tu maleta, devúelvete y empieza de nuevo. ¡La vida misma se trata de ello!


¡NUNCA ES TARDE PARA EMPEZAR!

Muchas gracias por leernos y esperamos que hayas aprendido o recordado algo más sobre el mundo de R. Nos vemos en la segunda parte de este post, en la cual ya empezaremos a ver algunos gráficos básicos!!



Bibliografía

Revisión

Eliana Tabares Lara

Recuerda que todos nuestros códigos están almacenados en GitHub