Manipulación de data con Tidyverse

En esta sección vamos a aprender a manipular data con los paquetes de tidyverse.

Maria Pia van Oordt https://www.linkedin.com/in/maria-pia-van-oordt-van-oordt-l%C3%B3pez-9a17a6233/ (Q-LAB PUCP)https://qlab.pucp.edu.pe/
2022-06-03

¿Que es un paquete? Un paquete es una colección de funciones y conjunto de datos desarrollados por la comunidad de R. Ayudan a mejorarla funcionalidad del programa, agilizar ciertas tareas y a agregar funciones nuevas.

¿Que es Tidyverse?

Tidyverse es una colección de paquetes de R diseñados para el Data Science. Es conocido porque es uno de los más populares gracias a las funciones muy útiles que provee para la manipulación de data ya que tiene paquetes para cada paso del tratamiento de data y es por ello que nos ayuda a trabajar las bases de datos. Ha sido desarrollo por RSutdio.

Es consistente: Todos los paquete tienen una misma estructura

Es Concatenable: Siempre se pueden unir pequeñas partes

Para importar datos tenemos readr, haven y readxl. Para limpiar los datos usamos tidyr, para transofrmar los datos se usa dplyr, que lo veremos a continuación, para modelar se usa purr o broom, para visualizar se usa ggplot2. Finalmente, para comunicar se usa knitr para publicar los resultados por html, pdf, ppt. y rmarkdown es la estructura de knitr.

¿Como se instala un paquete? Cuando instalas un paquete estas descargando una serie de funciones con un solo comando. Para instalar un paquete solo tienes que correr el siguiente comando con el nombre del paquete dentro del paréntesis entre comillas.

install.packages("tidyverse")

Por ejemplo::Puedes descargar solo el paquete “ggplot2” usando los comandos indicados anteriormente (“install.packages(”ggplot2”)). Sin embargo; si ya descargaste “tidyverse”, ya descargaste ggplot2 también.

Recuenden:Los comandos en R tienen que estar con los espacios, comas, comillas, paréntesis y puntos dexactamente de cierta forma , sino el comando no correrá! Es recomendable correr este comando en la consola porque solo se tiene que descargar un paquete una vez por lo cual si dejas el comando en tu script se podría volver a correr.

Abrir el paquete

Una vez instalado el paquete , ábrelo con el siguiente comando.

Esto se repite con todos los paquetes que quieras instalar y abrir. Puedes ya tener el paquete descargado pero si no lo abres con este comando, no podrás utilizar las funciones.Ya que tidyverse es un conjunto de paquetes, si lo abres estas abriendo todos los paquetes que este incluye. Otra opción es abrir solo el o los paquetes que necesitas usar ya que abrir el paquete de tidyverse a veces demora un poco debido a que son varios paquetes.

#Descargamos la Data

A continuación descargaremos la siguiente data para utilizar las principales funciones dentro de Tidyverse y las más útiles para nuestro trabajo en el Laboratorio.

#Esta librería sirve para abrir bases de datos que estan en formato SAS, SPSS, Stata, Systat, Weka

library(foreign)
usa <- read.spss("usa.sav",
          use.value.labels = T, 
          to.data.frame=TRUE)

Siempre es bueno ver la base de datos y analizar su estructura; con los siguientes comandos pueden hacerlo :

Ver la estructura de bases de datos, el tipo de variables : str(usa)

Ver base de datos : View(usa)

Ver los nombres de las variables : names(usa)

Nota:Para ver la Base de datos también puedes buscarla en tu environment y darle click.

##Principales Paquetes y funciones

#ggplot2

Este paquete sirve para crear gráficos basados en la data seleccionada. También se le puede indicar una serie de parámetros como el color y tipo de letra, los títulos de los gráficos y más características que se indican con los comando.

Grafico Pie :

Pasos previos:

1 Formateo la variable como categórica.

2Acuerdense de revisar en el diccionario de datos o en la misma base de datos,si es que posible verificarlo desde ahi, COMO esta formateada la variable.

Por ejemplo en este caso tendríamos que confirmar que representa 1 y que representa 2 pero en esta base de datos los niveles ya están etiquetados.

usa$sex=as.factor(usa$sex)
levels(usa$sex)<-c("Hombre","Mujer")
str(usa$sex)
 Factor w/ 2 levels "Hombre","Mujer": 2 2 2 2 1 1 2 2 2 2 ...
levels(usa$sex)
[1] "Hombre" "Mujer" 
table(usa$sex)

Hombre  Mujer 
   790   1017 

4 Creamos un dataframe con la variable que usaremos para el gráfico, esto lo hacemos porque para los gráficos que haremos al principio, no necesitamos que se representen todas las observaciones como puntos sino que veremos más los porcentajes y la frecuencia de cada categoría de la variable. Hay varias formas de hacer lo mismo, esta es la que hemos elegido para esta capacitación para practicar las funciones del dplyr.

Ojo usamos %>% como un “conector” , es útil pensarlo como un ” y luego”. También usamos las funciones de dyplr.

df<-usa %>%  #creamos un dataframe llamado "df"
  group_by(sex) %>% #Agrupamos los datos por la variable "sex"
  count() %>% #Contamos la frecuencia de las categorias de sex, es decir, Hombre-Mujer en esta base de datos 
  ungroup() %>% #Desgrupamos la data para que no afecté el siguiente paso
  mutate(pcnt = n / sum(n)) %>% #Usamos mutate para crear la variable pcnt en la cual vamos a dividir n(cantidad de observaciones en cada categoría)/ la suma total de observaciones de la muestra
  arrange(pcnt) %>% #ordenamos la variable creada de menor a mayor
  mutate(etiquetas = scales::percent(pcnt)) #creamos otra variable llamada etiqueta en donde generamos los porcentajes de cada categoria según la cantidad de observaciones en cada una.

Nota: En este Link encontramos todos los colores de R, sus codigos y nombres.

Creamos el gráfico

ggplot(df, aes(x = "", y = pcnt, fill = sex)) +
  geom_col(color = "black") + #para los bordes
  geom_label(aes(label = n), color = c("black", "black"),
            position = position_stack(vjust = 0.5),
            show.legend = FALSE) + #geom_label es para las etiquetas
  guides(fill = guide_legend(title = "sexo")) + #para la leyenda y el título
  scale_fill_manual(values = c("#CEFF33", "lightblue")) + #para ponerle color al grafico
  coord_polar(theta = "y") + #para convertir la barra en circulo
  theme_void() #el tema, este borra todo lo que esta alrededor del grafico, hay otros que lo ponen en un cuadrado o indican el centro exacto etc.

Generamos el mismo gráfico pero con porcentajes

Para ello ponemos la variable “etiquetas” que creamos al principio dentro del comando geom_label(que se encarga de las etiquetas). Con esto le estamos diciendo a R que ponga en las etiquetas el valor de la variable etiqueta en cada caso; es decir, el valor de la variable etiqueta en el caso de las mujeres y en el caso de los hombres. Debido a la formula de n/sum(n), nos dara el porcentaje de cantidad de mujeres y hombres.

ggplot(df, aes(x = "", y = pcnt, fill = sex)) +
  geom_col(color = "black") + 
  geom_label(aes(label = etiquetas), color = c("black", "black"),
            position = position_stack(vjust = 0.5),
            show.legend = FALSE) + 
  guides(fill = guide_legend(title = "sexo")) +
  scale_fill_manual(values = c("#CEFF33", "lightblue")) +
  coord_polar(theta = "y") + 
  theme_void()

Grafico de Barras

ggplot(usa, aes(x = sex, fill = sex)) + #fill=sex : le estamos diciendo a R que 
  # rellene las barras según el sexo y automaticamente el R asigna colores
  geom_bar() 
# geom_text(aes(label=n), vjust = 2, colour = "black")

Ahora vamos a especificarle a R que color queremos para cada barra y usaremos la base de datos creada anteriormnete para practicar

Con Porcentaje
ggplot(df, aes(x = sex , y = n, fill = sex)) + 
  geom_col() +
  scale_fill_manual(values=c("green", "pink")) +
  guides(fill = guide_legend(title = "Cantidad de mujeres y hombres")) +
  geom_text(aes(label = etiquetas), vjust = 1.5, colour = "black")

Con frecuencia
ggplot(df, aes(x = sex , y = n, fill = sex)) + 
  geom_col() +
  scale_fill_manual(values=c("green", "pink")) +
  guides(fill = guide_legend(title = "Cantidad de mujeres y hombres")) +
  geom_text(aes(label = n), vjust = 1.5, colour = "black")

Histograma

Usaremos la base de datos Usa porque se usaran otras variables

Usamos la variable ingresos porque con este gráfico representamos las frecuencias por lo cual se usa para graficar variables númericas.

ggplot(usa,aes(x = ingresos)) +
  geom_histogram(color = 1, fill = "blue") +
  ggtitle("Ingresos")

Boxplot

Basico

ggplot(usa, aes(x = sex, y = ingresos)) + 
  stat_boxplot(geom = "errorbar",
               width = 0.15,
               linetype =2, #tipo de linea
               color = 1) +
  geom_boxplot(linetype = 2,
               lwd = 0.5, #ancho de linea
               fill = 2, #color de la caja
               alpha = 0.5, #transparencia
               color = 1, #color borde
               outlier.colour =2) + #color atipicos
  ggtitle ("Ingresos según el sexo")

Con puntos que representan las observaciones

ggplot(usa, aes(x = sex, y = ingresos)) + 
  stat_boxplot(geom = "errorbar",
               width = 0.15) +
  geom_boxplot(outlier.shape = NA) +
  geom_jitter(width = 0.2,colour = 2, shape = 17, size = 1, ) +
  ggtitle ("Ingresos según el sexo")

Con diferentes colores de cajas

ggplot(usa, aes(x = sex, y = ingresos, 
                colour = sex, 
                shape = sex)) + 
  geom_boxplot(outlier.shape = NA) +
  geom_jitter(width = 0.2,colour = 2 , shape = 17, size = 1, ) +
  ggtitle ("Ingresos según el sexo")

#dplyr

El paquete dplyr es el más útil en R para la manipulación de datos. Uno de los aportes mas grandes de dplyr es %>% (se genera mediante control shift M).

Filter : Filtrar las filas según un criterio específico. Es importante siempre acordarse que als filas son las observaciones y las columnas las variables.

Ejemplos :

Aca estamos filtrando de la data usa las observaciones (personas) que son judios y apoyan el aborto solo en caso de violación. Podemos ver en el resultado que hay 3 filas (rows) y 25 columnas (columns) lo que significa que hay 3 observaciones, en este caso personas, que cumplen con las dos caracteristicas seleccionadas. Las 25 columnas son las 25 variables de la base de datos que estamos usando y nos brindan la infromación de esos 3 casos que han sido filtrados.

filter(usa, relig=="Judio", aborto=="2. Solo caso de violacion") 
    id     region            consipol edad intecamp clintpre gorepre
1  137     3. Sur 5. Algo conservador   57  3. Poco      100     100
2  310   4. Oeste 5. Algo conservador   51 1. Mucho        5      60
3 1598 1. Noreste      6. Conservador   35  3. Poco       50      75
  gbushpre                    aborto       anonac
1       51 2. Solo caso de violacion 1949 o antes
2       60 2. Solo caso de violacion 1949 o antes
3       50 2. Solo caso de violacion    1950-1965
                   educ   sexo ingresos     marital voto96
1 3. Más que secundaria Hombre    28036 5. Solteros   Votó
2 3. Más que secundaria  Mujer    46714   1. Casado   Votó
3 3. Más que secundaria  Mujer    97014   1. Casado   Votó
          quien96 su_ecopas clintpst gorepst gbushpst relig voto00
1 1. Bill Clinton  2. Igual       50      50       50 Judio   Votó
2   5. Ross Perot  2. Igual     <NA>    <NA>     <NA> Judio   <NA>
3 1. Bill Clinton  2. Igual       60      85       45 Judio   Votó
       confipol difclint    sex
1 2. Media Baja      -50 Hombre
2          <NA>       NA  Mujer
3       4. Alta       10  Mujer

En el siguiente ejemplo se esta filtrando a todas las personas de la muestra tengan una edad mayorigual a 80 años que sean mujeres y que opinen que se deba permitir el aborto. R nos indica que hay 8 casos filtrados

filter(usa, sexo=="Mujer", aborto=="4. Permitir", edad>=80)
    id          region            consipol edad intecamp clintpre
1 1646 2. Norte Centro 5. Algo conservador   93  3. Poco     <NA>
2 1789      1. Noreste     3. Algo liberal   88 1. Mucho      100
3 1687          3. Sur      1. Muy liberal   88 1. Mucho      100
4 1083 2. Norte Centro     3. Algo liberal   82  5. Nada      100
5  838          3. Sur     3. Algo liberal   81  5. Nada       85
6  581          3. Sur         4. Moderado   80 1. Mucho       75
7  707        4. Oeste 5. Algo conservador   80  3. Poco       40
8  900      1. Noreste  7. Muy Conservador   80  3. Poco        0
  gorepre gbushpre      aborto       anonac                    educ
1    <NA>     <NA> 4. Permitir         <NA>   3. Más que secundaria
2     100        0 4. Permitir 1949 o antes   3. Más que secundaria
3     100     <NA> 4. Permitir 1949 o antes   3. Más que secundaria
4     100       15 4. Permitir 1949 o antes 1. Menos que Secundaria
5      85       70 4. Permitir 1949 o antes   3. Más que secundaria
6      60       40 4. Permitir 1949 o antes   3. Más que secundaria
7      60       70 4. Permitir 1949 o antes   3. Más que secundaria
8      15      100 4. Permitir 1949 o antes   3. Más que secundaria
   sexo ingresos       marital  voto96         quien96 su_ecopas
1 Mujer       NA      2. Viudo    Votó     3. Bob Dole  2. Igual
2 Mujer    44054   5. Solteros    Votó 1. Bill Clinton  2. Igual
3 Mujer    92553      2. Viudo    Votó 1. Bill Clinton  2. Igual
4 Mujer    89441 3. Divorciado No votó            <NA>      <NA>
5 Mujer    16029   4. Separado    Votó 1. Bill Clinton  1. Mejor
6 Mujer    32838      2. Viudo    Votó 1. Bill Clinton      <NA>
7 Mujer    66983      2. Viudo    Votó   5. Ross Perot      <NA>
8 Mujer    59639      2. Viudo    Votó     3. Bob Dole      <NA>
  clintpst gorepst gbushpst       relig voto00      confipol difclint
1     <NA>    <NA>     <NA> Protestante   Votó          <NA>       NA
2      100     100     <NA>    Catolico   Votó          <NA>        0
3     <NA>    <NA>     <NA> Protestante   <NA>          <NA>       NA
4      100     100        0 Protestante   Votó 2. Media Baja        0
5       85      87       80 Protestante   Votó       4. Alta        0
6       45      55       45 Protestante   Votó 2. Media Baja      -30
7       40      60       60 Protestante   Votó 3. Media Alta        0
8        0      50       85 Protestante   Votó 2. Media Baja        0
    sex
1 Mujer
2 Mujer
3 Mujer
4 Mujer
5 Mujer
6 Mujer
7 Mujer
8 Mujer

Podemos incluir varias variables y filtrar la base de datos con todas las variables que queramos.

select: Este comando nos permite seleccionar un subconjunto de variables de la base de datos indicando sus nombres.

Ejemplo

Aca estamos seleccionando la variable intecamp y sexo de la base de datos usa y las estamos guardando en un un dataframe

Seleccion<-select(usa, intecamp, sexo)%>% head(10)
#Seleccion

Tambien podemos usar este comando para seleccionar todas las variables menos algunas.

Por ejemplo aca estamos selecionando todas las variables de la base de datos “usa” menos las variables “voto96” y “quien96”. Asimismo, guardamos esta selección de variables en un dataframe

# quitando variables
select(usa, -voto96, -quien96) %>% head(10)
     id          region            consipol edad intecamp clintpre
1  1347          3. Sur                <NA>   97  5. Nada       40
2  1226          3. Sur         4. Moderado   96  3. Poco       85
3  1300 2. Norte Centro          2. Liberal   95  5. Nada      100
4  1646 2. Norte Centro 5. Algo conservador   93  3. Poco     <NA>
5   799          3. Sur 5. Algo conservador   93 1. Mucho       85
6  1328        4. Oeste                <NA>   92  5. Nada       50
7  1412          3. Sur 5. Algo conservador   91  3. Poco       30
8   229 2. Norte Centro      6. Conservador   90 1. Mucho       50
9  1652          3. Sur      6. Conservador   90 1. Mucho       60
10  546 2. Norte Centro 5. Algo conservador   89  5. Nada     <NA>
   gorepre gbushpre                    aborto       anonac
1       60       80         1. Nunca permitir 1949 o antes
2       85       70 2. Solo caso de violacion 1949 o antes
3       85       70 2. Solo caso de violacion 1949 o antes
4     <NA>     <NA>               4. Permitir         <NA>
5       60       90               4. Permitir 1949 o antes
6       50       50 2. Solo caso de violacion 1949 o antes
7       40       70 2. Solo caso de violacion 1949 o antes
8       60       60         1. Nunca permitir 1949 o antes
9       70       80 2. Solo caso de violacion 1949 o antes
10    <NA>     <NA>         1. Nunca permitir 1949 o antes
                      educ   sexo ingresos   marital su_ecopas
1  1. Menos que Secundaria  Mujer       NA 1. Casado      <NA>
2  1. Menos que Secundaria  Mujer    36297  2. Viudo      <NA>
3  1. Menos que Secundaria  Mujer     3856  2. Viudo  1. Mejor
4    3. Más que secundaria  Mujer       NA  2. Viudo  2. Igual
5  1. Menos que Secundaria Hombre    83308  2. Viudo  2. Igual
6  1. Menos que Secundaria Hombre    32926 1. Casado  1. Mejor
7   2. Secundaria Completa  Mujer    36207  2. Viudo  2. Igual
8    3. Más que secundaria  Mujer    82888  2. Viudo      <NA>
9    3. Más que secundaria  Mujer    66595  2. Viudo      <NA>
10 1. Menos que Secundaria  Mujer    95586  2. Viudo   3. Peor
   clintpst gorepst gbushpst       relig  voto00      confipol
1      <NA>    <NA>     <NA>        Otro    <NA>          <NA>
2        50      50       50 Protestante NO votó          <NA>
3      <NA>    <NA>     <NA> Protestante    <NA>          <NA>
4      <NA>    <NA>     <NA> Protestante    Votó          <NA>
5        30      40      100 Protestante    Votó       1. Baja
6        20      50       65 Protestante    Votó 2. Media Baja
7      <NA>    <NA>     <NA> Protestante    <NA>          <NA>
8        80      50     <NA> Protestante    Votó 2. Media Baja
9        80      75       90 Protestante NO votó       4. Alta
10     <NA>      40     <NA>    Catolico NO votó 2. Media Baja
   difclint    sex
1        NA  Mujer
2       -35  Mujer
3        NA  Mujer
4        NA  Mujer
5       -55 Hombre
6       -30 Hombre
7        NA  Mujer
8        30  Mujer
9        20  Mujer
10       NA  Mujer
menos96 <- select(usa, -voto96, -quien96) %>% head(10)
#menos96 

Si van a environment pueden ver todos los datasets, objetos etc que han creado

summarise Este comando te permite crear resúmenes de grupos de datos según variables,funciones, medidas de tendencia central, etc.

Ejemplo : En este comando le estamos indicando a R que cree una variable llamada “promgorepost” y que dentro de ella se encuentre el promedio de los valores de la variable “gorepst”. En este caso el comando summarise esta resumiendo todos los datos de la variable gorepst y esta calculando el promedio de estos y también esta creando una variable con los datos resumidos.

usa$gorepst<- as.numeric(usa$gorepst)
usa$gorepre<- as.numeric(usa$gorepre)

summarise(usa, promgorepost = mean(gorepst, na.rm = T))
  promgorepost
1     21.76172

Otro ejemplo:

summarise(usa,media_edad=mean(edad, na.rm=T)) %>% head(10)
  media_edad
1   47.20634

group_by: Este comando nso sirve para agrupar datos. Agrupa diferentes observaciones de manera que la base de datos original no cambie.

Ejemplo: Aca le estamos indicando a R que agrupe la data en base a posición política de los encuestados, además usaremos summarise para sacar el promedio de la aprobación de Bush post gestión.

usa$gbushpst=as.numeric(usa$gbushpst)
usa.g <- usa%>% 
  group_by(., consipol) %>% 
  summarise(mean = mean(gbushpst,na.rm=TRUE), n = n()) %>% head(10)

usa.g
# A tibble: 8 × 3
  consipol             mean     n
  <fct>               <dbl> <int>
1 1. Muy liberal       11.8    82
2 2. Liberal           15.3   158
3 3. Algo liberal      17.7   351
4 4. Moderado          20.1   109
5 5. Algo conservador  22.2   528
6 6. Conservador       25.8   250
7 7. Muy Conservador   29.1   145
8 <NA>                 18.7   184

count: Con este comando podemos contar los casos en base a una variable.

Ejemplo: Le estamos indicando al R que cuente los casos de las personas de acuerdo al nivel educativo

count(usa, educ, sort = F)%>% head(10) #con SORT=F estamos diciendo que nos ordene los datos de manera descendente 
                     educ    n
1 1. Menos que Secundaria  180
2  2. Secundaria Completa  519
3   3. Más que secundaria 1101
4                    <NA>    7

En este ejemplo le estamos pidiendo a R que agrupe las observaciones de la base de datos “usa” según la variable “consipol” y luego que cuente según el nivel educativo de forma ascendente.

group_by(usa,consipol) %>% 
  count(.,educ )%>% head(10)
# A tibble: 10 × 3
# Groups:   consipol [3]
   consipol        educ                        n
   <fct>           <fct>                   <int>
 1 1. Muy liberal  1. Menos que Secundaria     4
 2 1. Muy liberal  2. Secundaria Completa     16
 3 1. Muy liberal  3. Más que secundaria      62
 4 2. Liberal      1. Menos que Secundaria    10
 5 2. Liberal      2. Secundaria Completa     37
 6 2. Liberal      3. Más que secundaria     111
 7 3. Algo liberal 1. Menos que Secundaria    25
 8 3. Algo liberal 2. Secundaria Completa    100
 9 3. Algo liberal 3. Más que secundaria     225
10 3. Algo liberal <NA>                        1

mutate : Este comando te permite crear una nueva variable conservando las ya existentes.

arrange: Con este comando podemos ordenar los valores de una variable de forma ascendente o descendente.

Ejemplo : En este comando le estamos indicando a R que queremos crear un data frame y que agreguemos a este la variable difgore la cual es la diferencia de las variables “gorepst” y “gorepre”. Luego le estamos pidiendo que ordene a la variable gorepst de forma descendente y luego le estamos pidiendo que seleccione las variables “id”, “difgore”, “gorepre”, “gorepst” para mostrar los resultados.

usagoredesc=mutate(usa, difgore =  gorepst - gorepre) %>%
  arrange(., desc(gorepst)) %>%
  select(., id, difgore, gorepre, gorepst)

#View(usagoredesc) Para corroborar que se agregó la variable

De manera ascendente

usagoreasc <- mutate(usa, difgore =  gorepst - gorepre) %>%
  arrange(.,difgore) %>%
  select(., id, difgore, gorepre, gorepst)
#View(usagoreasc)

Transmute : Este comando es muy parecido al anterior. La diferencia es que muestra únicamente la nueva variable creada (no se agrega a la base de datos).

Ejemplos: Le estamos indicando a R que cree un dataframe llamado “usabush” y que cree una variable llamada “difbush” que sera la diferencia entre la variable “gbushpst” y “gbushppre”. Luego que ordene los valores de esta variable de forma descendente.

usa$gbushpst<- as.numeric(usa$gbushpst)
usa$gbushpre<- as.numeric(usa$gbushpre)

usabush=transmute(usa, difbush = gbushpst - gbushpre) %>%
  arrange(., desc(difbush)) 
#View(usabush)

merge : Este comando nos eprmite juntar datasets

left_join() : Combinar dos datasets y quedarse con las observaciones de la data de origen. (Tiene # porque al correr el comando , aparece toda la data en la pagina y toma mucho espacio, usetdes copienlo sin el #)

left_join(usagoreasc, usagoredesc , by ='id')%>% head(10)
     id difgore.x gorepre.x gorepst.x difgore.y gorepre.y gorepst.y
1  1489       -45        46         1       -45        46         1
2   191       -36        42         6       -36        42         6
3    37       -34        35         1       -34        35         1
4    25       -32        33         1       -32        33         1
5    71       -32        51        19       -32        51        19
6   137       -32        51        19       -32        51        19
7   387       -32        33         1       -32        33         1
8   847       -32        51        19       -32        51        19
9  1755       -32        33         1       -32        33         1
10  785       -32        42        10       -32        42        10

right_join() : Combinar dos datasets y quedarse con las observaciones de destino

right_join(usagoreasc, usa, by = 'id')%>% head(10)
     id difgore gorepre.x gorepst.x          region
1  1489     -45        46         1        4. Oeste
2   191     -36        42         6      1. Noreste
3    37     -34        35         1          3. Sur
4    25     -32        33         1        4. Oeste
5    71     -32        51        19          3. Sur
6   137     -32        51        19          3. Sur
7   387     -32        33         1          3. Sur
8   847     -32        51        19 2. Norte Centro
9  1755     -32        33         1      1. Noreste
10  785     -32        42        10      1. Noreste
              consipol edad intecamp clintpre gorepre.y gbushpre
1           2. Liberal   23 1. Mucho       90        46        1
2  5. Algo conservador   53  3. Poco       75        42       19
3  5. Algo conservador   76  3. Poco       50        35       43
4   7. Muy Conservador   63  3. Poco       50        33       11
5      3. Algo liberal   58  3. Poco       75        51       19
6  5. Algo conservador   57  3. Poco      100        51       20
7      3. Algo liberal   47 1. Mucho       85        33       43
8  5. Algo conservador   45  3. Poco      100        51       43
9          4. Moderado   42  3. Poco       85        33       19
10 5. Algo conservador   40  5. Nada       85        42       19
                      aborto          anonac                    educ
1                4. Permitir Despues de 1965  2. Secundaria Completa
2                4. Permitir    1949 o antes   3. Más que secundaria
3                4. Permitir    1949 o antes   3. Más que secundaria
4  2. Solo caso de violacion    1949 o antes   3. Más que secundaria
5  2. Solo caso de violacion    1949 o antes   3. Más que secundaria
6  2. Solo caso de violacion    1949 o antes   3. Más que secundaria
7                4. Permitir       1950-1965 1. Menos que Secundaria
8   3. Solo en Caso de Salud       1950-1965 1. Menos que Secundaria
9   3. Solo en Caso de Salud       1950-1965  2. Secundaria Completa
10               4. Permitir       1950-1965  2. Secundaria Completa
     sexo ingresos     marital  voto96         quien96 su_ecopas
1  Hombre    29191 5. Solteros No votó            <NA>  2. Igual
2  Hombre     2006   1. Casado    Votó 1. Bill Clinton  2. Igual
3   Mujer    22519    2. Viudo No votó            <NA>   3. Peor
4   Mujer     8013 5. Solteros    Votó            <NA>  2. Igual
5   Mujer    74038   1. Casado    Votó 1. Bill Clinton  2. Igual
6  Hombre    28036 5. Solteros    Votó 1. Bill Clinton  2. Igual
7  Hombre    86838   1. Casado No votó            <NA>  1. Mejor
8   Mujer    90926        <NA> No votó            <NA>      <NA>
9   Mujer     5259   1. Casado    Votó 1. Bill Clinton      <NA>
10 Hombre    30262 5. Solteros    Votó   5. Ross Perot      <NA>
   clintpst gorepst.y gbushpst       relig  voto00      confipol
1        80         1        1        <NA>    Votó 2. Media Baja
2        75         6       10 Protestante    Votó 2. Media Baja
3        50         1       38 Protestante NO votó 3. Media Alta
4         0         1       30        Otro    Votó 2. Media Baja
5        50        19       10 Protestante    Votó       4. Alta
6        50        19       18       Judio    Votó 2. Media Baja
7        50         1       38        Otro    Votó 2. Media Baja
8       100        19        8 Protestante NO votó 2. Media Baja
9        70         1       38    Catolico    Votó       4. Alta
10        0        10       23    Catolico    Votó       1. Baja
   difclint    sex
1       -10 Hombre
2         0 Hombre
3         0  Mujer
4       -50  Mujer
5       -25  Mujer
6       -50 Hombre
7       -35 Hombre
8         0  Mujer
9       -15  Mujer
10      -85 Hombre

y la misma dinámica con los siguientes comandos:

inner_join() : Combinar dos datasets y excluir todas las columnas(variables) que no coinciden.

full_join() : Combinar dos datasets y quedarse con todas las observaciones, de ambos datasets.

tidyr

Este paquete tiene como función crear “Tidy data”.

¿Que es “Tidy data”? Tidy data es aquella data en donde cada columna es una variable, cada fila es una observación y cada celda es un solo valor.

Este paquete fue creado para tener a tu data organizada y limpia y así poder analizarla de la mejor forma usando todas las otras herramientas.

gather() : Este comando te permite emparejar los valores de dos variables en pares.

Para este ejercicio usaremos una base que esta en el mismo R. El mismo programa tiene una serie de paquetes y bases de datos que vienen con el mismo programa.

mtcarsG <- mtcars %>% gather(atributo, valor)
#mtcarsG

Separate() : Convierte una única columna en múltiples separando los caracteres que componen a la inicial

Descargamos esta base de datos para el ejercicio. Lo que queremos lograr es separar la variable location en “lat” y “long”

Busquen la variable en la base de datos apra que vean como esta codificada.

df3 <- read.table("http://gauss.inf.um.es/datos/longlat.txt", sep=";", head=T)%>% head(10)
df3
        Date Time Accident.Type                Location
1 07/01/2012 1630            PD  (39.26699, -76.560642)
2 07/02/2012 1229            PD (39.000549, -76.399312)
3 07/02/2012 1229            PD  (39.00058, -76.399267)
4 07/02/2012  445            PI   (39.26367, -76.56648)
5 07/02/2012  802            PD (39.240862, -76.599017)
6 07/02/2012  832            PD   (39.27022, -76.63926)

Le quitamos los parentesis a nuestra variable de interes que es Location

df3$Location <- gsub("[()]", "", df3$Location) %>% head(10)
df3
        Date Time Accident.Type              Location
1 07/01/2012 1630            PD  39.26699, -76.560642
2 07/02/2012 1229            PD 39.000549, -76.399312
3 07/02/2012 1229            PD  39.00058, -76.399267
4 07/02/2012  445            PI   39.26367, -76.56648
5 07/02/2012  802            PD 39.240862, -76.599017
6 07/02/2012  832            PD   39.27022, -76.63926
separate(df3, col = Location, into = c("lat","long"), sep = ",")%>% head(10)
        Date Time Accident.Type       lat        long
1 07/01/2012 1630            PD  39.26699  -76.560642
2 07/02/2012 1229            PD 39.000549  -76.399312
3 07/02/2012 1229            PD  39.00058  -76.399267
4 07/02/2012  445            PI  39.26367   -76.56648
5 07/02/2012  802            PD 39.240862  -76.599017
6 07/02/2012  832            PD  39.27022   -76.63926

unite() : unir dos variables en una

unite(usa, nueva_variable, sexo, marital, sep= "_") %>% head(5)
    id          region            consipol edad intecamp clintpre
1 1347          3. Sur                <NA>   97  5. Nada       40
2 1226          3. Sur         4. Moderado   96  3. Poco       85
3 1300 2. Norte Centro          2. Liberal   95  5. Nada      100
4 1646 2. Norte Centro 5. Algo conservador   93  3. Poco     <NA>
5  799          3. Sur 5. Algo conservador   93 1. Mucho       85
  gorepre gbushpre                    aborto       anonac
1      29       35         1. Nunca permitir 1949 o antes
2      42       30 2. Solo caso de violacion 1949 o antes
3      42       30 2. Solo caso de violacion 1949 o antes
4      NA       NA               4. Permitir         <NA>
5      29       37               4. Permitir 1949 o antes
                     educ  nueva_variable ingresos  voto96
1 1. Menos que Secundaria Mujer_1. Casado       NA No votó
2 1. Menos que Secundaria  Mujer_2. Viudo    36297    <NA>
3 1. Menos que Secundaria  Mujer_2. Viudo     3856    Votó
4   3. Más que secundaria  Mujer_2. Viudo       NA    Votó
5 1. Menos que Secundaria Hombre_2. Viudo    83308    Votó
          quien96 su_ecopas clintpst gorepst gbushpst       relig
1            <NA>      <NA>     <NA>      NA       NA        Otro
2            <NA>      <NA>       50      19       18 Protestante
3 1. Bill Clinton  1. Mejor     <NA>      NA       NA Protestante
4     3. Bob Dole  2. Igual     <NA>      NA       NA Protestante
5   5. Ross Perot  2. Igual       30      15       38 Protestante
   voto00 confipol difclint    sex
1    <NA>     <NA>       NA  Mujer
2 NO votó     <NA>      -35  Mujer
3    <NA>     <NA>       NA  Mujer
4    Votó     <NA>       NA  Mujer
5    Votó  1. Baja      -55 Hombre