¿Qué es R y Rstudio?

R es un entorno de software libre para la computación estadística y graficación. Se compila y ejecuta en una amplia variedad de plataformas UNIX, Windows y MacOS.

RStudio es un conjunto de herramientas integradas diseñadas para ayudarle a ser más productivo con R y Python. Incluye una consola, un editor que resalta la sintaxis y admite la ejecución directa del código, y una variedad de herramientas robustas para trazar, ver el historial, depurar y gestionar el espacio de trabajo.

Cómo instalar R y Rstudio

Objetos en R (Vectores, marco de datos, Matrices, Listas), creación.

##Vectores

Por defecto lo vectores en R con vectores columna, para incluirlos manualmente se usa la letra “c” en minúscula; los elementos del vector van separados por comas. El nombre del vector puede ser una palabra o letras puede contener números pero no se recomienda que estos vayan al comienzo de nombre. Para asignar el nombre se hace uso de simbolo “\(=\)

TRM=c(4289.67, 4375.33, 4361.60, 4415.60, 4433.29, 4456.05)

Si el vector contiene elementos no numéricos “categóricos”, los elementos del vector deben llevar doble comilla ““. Por ejemplo

Col=c("Verde", "Verde", "Morado", "Blanco", "Morado", "Blanco")

En Rstudio los objetos creados a parecerán en la ventana superior izquierda en la pestaña Emvironment

Marco de datos

Un marco de datos o Data frame (data.frame), es el nombre que recibe las tablas de datos en R. Tiene la caracteristica de tener igual número de filas para un conjunto de vectores columna.

df=data.frame(TRM, Col)
head(df)
##       TRM    Col
## 1 4289.67  Verde
## 2 4375.33  Verde
## 3 4361.60 Morado
## 4 4415.60 Blanco
## 5 4433.29 Morado
## 6 4456.05 Blanco
attach(df)
## The following objects are masked _by_ .GlobalEnv:
## 
##     Col, TRM
names(df)
## [1] "TRM" "Col"

No olviden usar las funciones attach y names, luego de crear un marco de datos.

Matrices

Las matrices son un arreglo por filas y columnas, a diferencia de data frame, las columnas o las filas no suele trabajarse por separado.

m1=matrix(TRM, ncol=2, nrow=3)
m1
##         [,1]    [,2]
## [1,] 4289.67 4415.60
## [2,] 4375.33 4433.29
## [3,] 4361.60 4456.05

R permite hacer operación entre matrices, calcular inversas , resolver sistemas de ecuaciones y mucho más.

Listas

Una lista es el objeto más general de R, estas pueden contener distintos tipos de objetos (vectores, matrices, data.frames) e incluso otras listas. Para llamar los objetos de las listas se usa el doble corchete cuadrado.

lista1=list(m1, df, TRM, Col)
head(lista1[[1]])
##         [,1]    [,2]
## [1,] 4289.67 4415.60
## [2,] 4375.33 4433.29
## [3,] 4361.60 4456.05

Importanción de datos desde Excel, SPSS, dta, SAS entre otros.

Para la importanción de datos vamos a utilizar las opción Import Dataset que viene incluida en la interfaz de Rstudio en la parte superior derecha, dentro de environment.

  • Ejemplo de importación con la GEIH

Lectura de datos desde la web y desde un google form

Uso de datos abiertos para la búsqueda y obtención de información en Colombia. https://www.datos.gov.co/

Con la url de la API

procesos=read.csv("https://www.datos.gov.co/resource/q6re-36rh.csv")
dim(procesos)
## [1] 1000   22

Con la url del portal del desarrollador, crear usuario y clave API. https://dev.socrata.com/foundry/www.datos.gov.co/q6re-36rh

Para entrar desde google form

df2=read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vQFG1qNbO1wndpqYC27XQMrEqUQwoMFil8YS3rIwYQ9TpOkLgj7lrnwqDs0bSWHYioWFrOgsDk-U1bv/pub?gid=242934044&single=true&output=csv", encoding="UTF-8")

Dplyr

Dentro del paquete tidyverse se cuenta con la funcionalidad dplyr (paquete que puede ser instalado por aparte). Este paquete permite que el procesamiento de datos se convierta en un proceso más sencillo. Su construcción permite que la lectura de los datos sea rápida, altamente expresiva, y de mente abierta.

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
## ✔ tibble  3.1.8     ✔ dplyr   1.0.9
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   2.1.2     ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(gapminder)
head(gapminder)
## # A tibble: 6 × 6
##   country     continent  year lifeExp      pop gdpPercap
##   <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
## 1 Afghanistan Asia       1952    28.8  8425333      779.
## 2 Afghanistan Asia       1957    30.3  9240934      821.
## 3 Afghanistan Asia       1962    32.0 10267083      853.
## 4 Afghanistan Asia       1967    34.0 11537966      836.
## 5 Afghanistan Asia       1972    36.1 13079460      740.
## 6 Afghanistan Asia       1977    38.4 14880372      786.

Entre una de las ventajas que se encuentran en dicho paquete es que los conjuntos de datos los lee en un formato titulado “tibble”. Este formato es el que permite simplicar el procesamiento de una base de datos.

class(gapminder)
## [1] "tbl_df"     "tbl"        "data.frame"

Como parte de este paquete se cuentan con funcionalidades como el filtrar, el seleccionar variables, hacer resumenes estadísticos y el pipe (una de las más utilizadas).

Filtrar Variables

Generalmente cuando se hace un filtro en la base de datos se utiliza una estructura predeterminada para seleccionar cuáles son esas filas o columnas que se quieren preservar en la base de datos.

(canada <- gapminder[241:252, ])
## # A tibble: 12 × 6
##    country continent  year lifeExp      pop gdpPercap
##    <fct>   <fct>     <int>   <dbl>    <int>     <dbl>
##  1 Canada  Americas   1952    68.8 14785584    11367.
##  2 Canada  Americas   1957    70.0 17010154    12490.
##  3 Canada  Americas   1962    71.3 18985849    13462.
##  4 Canada  Americas   1967    72.1 20819767    16077.
##  5 Canada  Americas   1972    72.9 22284500    18971.
##  6 Canada  Americas   1977    74.2 23796400    22091.
##  7 Canada  Americas   1982    75.8 25201900    22899.
##  8 Canada  Americas   1987    76.9 26549700    26627.
##  9 Canada  Americas   1992    78.0 28523502    26343.
## 10 Canada  Americas   1997    78.6 30305843    28955.
## 11 Canada  Americas   2002    79.8 31902268    33329.
## 12 Canada  Americas   2007    80.7 33390141    36319.

Este proceso anterior genera un nuevo set de datos que contiene las variables seleccionadas. Sin embargo, el proceso se puede hacer mucho más simple en con el comando filter() del paquete.

filter(gapminder, lifeExp<29)
## # A tibble: 2 × 6
##   country     continent  year lifeExp     pop gdpPercap
##   <fct>       <fct>     <int>   <dbl>   <int>     <dbl>
## 1 Afghanistan Asia       1952    28.8 8425333      779.
## 2 Rwanda      Africa     1992    23.6 7290203      737.
filter(gapminder, country=='Rwanda', year>1979)
## # A tibble: 6 × 6
##   country continent  year lifeExp     pop gdpPercap
##   <fct>   <fct>     <int>   <dbl>   <int>     <dbl>
## 1 Rwanda  Africa     1982    46.2 5507565      882.
## 2 Rwanda  Africa     1987    44.0 6349365      848.
## 3 Rwanda  Africa     1992    23.6 7290203      737.
## 4 Rwanda  Africa     1997    36.1 7212583      590.
## 5 Rwanda  Africa     2002    43.4 7852401      786.
## 6 Rwanda  Africa     2007    46.2 8860588      863.

Comando Pipe

Otra de las ventajas que se presentan es la funcionalidad pipe o tambien conocida por su comando %>% ; esto permite utilizar multiples comandos en solo pocas líneas de código.

Para realizar el comando se utiliza el atajo: Ctrl+Shift+M (Windows) o Cmd+Shift+M (Mac).

gapminder %>% head()
## # A tibble: 6 × 6
##   country     continent  year lifeExp      pop gdpPercap
##   <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
## 1 Afghanistan Asia       1952    28.8  8425333      779.
## 2 Afghanistan Asia       1957    30.3  9240934      821.
## 3 Afghanistan Asia       1962    32.0 10267083      853.
## 4 Afghanistan Asia       1967    34.0 11537966      836.
## 5 Afghanistan Asia       1972    36.1 13079460      740.
## 6 Afghanistan Asia       1977    38.4 14880372      786.

Esto es equivalente a tener un head(gapminder). Lo que hace el pipe es colocar lo que esta al lado izquierdo y lo pasa como una función al lado derecho. A esta función se le pueden agregar muchas más, lo cual simplifica las líneas de código a utilizar.

Seleccionar Variables por Filas o Columnas

El comando select se utiliza para subdividir los datos en variables o columnas.

select(gapminder, year, lifeExp)
## # A tibble: 1,704 × 2
##     year lifeExp
##    <int>   <dbl>
##  1  1952    28.8
##  2  1957    30.3
##  3  1962    32.0
##  4  1967    34.0
##  5  1972    36.1
##  6  1977    38.4
##  7  1982    39.9
##  8  1987    40.8
##  9  1992    41.7
## 10  1997    41.8
## # … with 1,694 more rows
## # ℹ Use `print(n = ...)` to see more rows

Aqui también se puede utilziar el pipe para añadir otras operaciones de una manera simplificada.

gapminder %>%
  select(year, lifeExp) %>%
  head(4)
## # A tibble: 4 × 2
##    year lifeExp
##   <int>   <dbl>
## 1  1952    28.8
## 2  1957    30.3
## 3  1962    32.0
## 4  1967    34.0

Otro ejemplo podría ser:

gapminder %>%
  filter(country == "Cambodia") %>%
  select(year, lifeExp)
## # A tibble: 12 × 2
##     year lifeExp
##    <int>   <dbl>
##  1  1952    39.4
##  2  1957    41.4
##  3  1962    43.4
##  4  1967    45.4
##  5  1972    40.3
##  6  1977    31.2
##  7  1982    51.0
##  8  1987    53.9
##  9  1992    55.8
## 10  1997    56.5
## 11  2002    56.8
## 12  2007    59.7

Resumen Estadístico

Para realizar un resumen estadístico de las variables (donde se reflejen estadísticas como la media, la mediana, la moda, entre otras) se utiliza el comando summarise. Este puede ser implementado dentro de un pipe o simplemente ser llamado para una variable específica.

gapminder %>%
  group_by(continent) %>%
  summarize(MediaGDPpercap=mean(gdpPercap)) 
## # A tibble: 5 × 2
##   continent MediaGDPpercap
##   <fct>              <dbl>
## 1 Africa             2194.
## 2 Americas           7136.
## 3 Asia               7902.
## 4 Europe            14469.
## 5 Oceania           18622.
gapminder %>%
    group_by(continent,year) %>%
    summarize(MediaGDPpercap=mean(gdpPercap))
## `summarise()` has grouped output by 'continent'. You can override using the
## `.groups` argument.
## # A tibble: 60 × 3
## # Groups:   continent [5]
##    continent  year MediaGDPpercap
##    <fct>     <int>          <dbl>
##  1 Africa     1952          1253.
##  2 Africa     1957          1385.
##  3 Africa     1962          1598.
##  4 Africa     1967          2050.
##  5 Africa     1972          2340.
##  6 Africa     1977          2586.
##  7 Africa     1982          2482.
##  8 Africa     1987          2283.
##  9 Africa     1992          2282.
## 10 Africa     1997          2379.
## # … with 50 more rows
## # ℹ Use `print(n = ...)` to see more rows

Lógica en las transformaciones de dplyr

Para profundizar en la lógica que hay detrás de las funciones de dplyr se cuenta con la siguiente imágen: https://github.com/rstudio/cheatsheets/blob/main/data-transformation.pdf

Limpieza de datos con dplyr

Tivyverse

Con Tivyverse instalmos un considerable conjunto de paquetes, destinados para la importación hasta para el procesamiento.

ggplot2

ggplot2 es un sistema para crear gráficos de forma declarativa, basado en La Gramática de los Gráficos. Usted proporciona los datos, le dice a ggplot2 cómo asignar variables a la estética, qué primitivas gráficas utilizar, y él se encarga de los detalles. https://github.com/rstudio/cheatsheets/blob/main/data-visualization-2.1.pdf

#install.packages("tidyverse")
#library(tidyverse)

Vamos a hacer uso de los datos mpg que tiene dentro del paquete tidyverse, estos datos contienen observaciones recogidas por la Agencia de Protección Medioambiental de EE.UU. sobre 38 modelos de coches.