Taller Tidy Data

Academatica

Teoría

Reglas

  1. Cada variable tiene que tener su columna
  2. Cada observación debe de estar en una fila
  3. Cada valor tiene que estar en una celda

Ventajas

  1. Al tener una estructura estándar es más fácil aprender las herramientas que utilizan esa estructura.
  2. Al tener variables como columnas, se le puede sacar provecho a la naturaleza vectorizada de R.

Ejercicios

Primero se carga las librerías a utilizar.

library(tidyverse)
library(readr)
library(knitr)#Para una mejor visualización de las tablas

Importa las tablas que se va a usar para trabajar

Tabla4a <- read_csv("tabla4a.csv")
Tabla4b <- read_csv("tabla4b.csv")
Tabla2 <- read_csv("tabla2.csv")
Tabla3 <- read_csv("tabla3.csv")

Lo que se desea es llevar estas tablas a un formato de Tidy Data

pivot_longer()

Este comando se utiliza cuando en las columnas se tiene los datos de la variable como en los ejemplos que se verán a continuación.

La siguiente tabla tiene un problema, el cual es que en las columnas se encuentran datos que no son variables, y de esta manera no cumplen con las reglas indicadas antes.

kable(Tabla4a)
Pais 1999 2000
Afganistan 745 2666
Brazil 37737 80488
China 212258 213766

Para lograr solucionar este problema utilizará el siguiente código

Casos_df <- 
Tabla4a %>% 
  pivot_longer(c("1999", "2000"),
               names_to = "Años",
               values_to = "Casos")
kable(Casos_df)
Pais Años Casos
Afganistan 1999 745
Afganistan 2000 2666
Brazil 1999 37737
Brazil 2000 80488
China 1999 212258
China 2000 213766

También se vera la tabla4b que tiene el mismo problema

kable(Tabla4b)
Pais 1999 2000
Afganistan 19987071 20595360
Brazil 172006362 174504898
China 1272915272 1280428583

Se soluciona

Poblacion_df <- 
Tabla4b %>% 
  pivot_longer(c("1999", "2000"),
               names_to = "Años",
               values_to = "Población")
kable(Poblacion_df)
Pais Años Población
Afganistan 1999 19987071
Afganistan 2000 20595360
Brazil 1999 172006362
Brazil 2000 174504898
China 1999 1272915272
China 2000 1280428583

Ahora se tiene que unir las dos tablas que se realizó, esto se logra con left_join lo cual utiliza las dos columnas parecidas o columnas llaves para unirlas en el ejemplo, en este caso son las columnas Pais

data_frame1 <- 
Casos_df %>% 
  left_join(Poblacion_df)
kable(data_frame1)
Pais Años Casos Población
Afganistan 1999 745 19987071
Afganistan 2000 2666 20595360
Brazil 1999 37737 172006362
Brazil 2000 80488 174504898
China 1999 212258 1272915272
China 2000 213766 1280428583

pivot_wider()

Este comando se utiliza cuando una columna contiene variables entonces esta función permite sacar de una columna las variables que se encuentran en ella. Esta es la tabla para que puedan ver el problema.

kable(Tabla2)
Pais Año Tipo Cuenta
Afganistan 1999 Poblacion 19987071
Afganistan 2000 Poblacion 20595360
Afganistan 1999 Casos 745
Afganistan 2000 Casos 2666
Brazil 1999 Poblacion 172006362
Brazil 2000 Poblacion 174504898
Brazil 1999 Casos 37737
Brazil 2000 Casos 80488
China 1999 Poblacion 1272915272
China 2000 Poblacion 1280428583
China 1999 Casos 212258
China 2000 Casos 213766

Si se puede observar en Tipo se encuentra variables las cuales se tiene que sacar. y esto se soluciona de manera fácil

Tabla2 %>%
  pivot_wider(names_from = Tipo, values_from = Cuenta)

En este caso no se colocó el comando kable() por tal motivo se muestra este formato de tabla. ## separete()

Ahora se verá un problema con la columna que contiene información de dos variables como en la siguiente tabla

kable(Tabla3)
Pais Año Razon
Afganistan 1999 745/19987071
Afganistan 2000 2666/20595360
Brazil 1999 37737/172006362
Brazil 2000 80488/174504898
China 1999 212258/1272915272
China 2000 213766/1280428583

Se puede observar que la columna Razon tiene los casos y la población en una misma celda, se procederá a separar con el siguiente comando

Tabla3 %>% 
  separate(Razon, into = c("Casos", "Población"), sep = "/")

Otro uso a separate()

data_frame2 <- 
Tabla3 %>% 
  separate(Razon, into = c("Casos", "Población"), sep = "/") %>%
  separate(Año, into = c("Siglo", "Año"), sep =2)
kable(data_frame2)
Pais Siglo Año Casos Población
Afganistan 19 99 745 19987071
Afganistan 20 00 2666 20595360
Brazil 19 99 37737 172006362
Brazil 20 00 80488 174504898
China 19 99 212258 1272915272
China 20 00 213766 1280428583

unite()

Lo que permite es juntar las columnas.

data_frame2 %>% 
  unite(nuevo, Siglo, Año, sep="")

Este es un taller realizado en Academatica el mismo que brindo un video explicando todo lo de este RNotebook. El enlace se encuentra en la parte final.

Referencias

R for Data Science

Taller Tidy Data Academatica

LS0tDQp0aXRsZTogIlRpZHkgRGF0YSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQojIFRhbGxlciBUaWR5IERhdGEgDQpbQWNhZGVtYXRpY2FdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9ckQ2VGZxRDBZNEEpDQoNCiMgVGVvcsOtYQ0KDQoNCiMjIFJlZ2xhcw0KDQoxLiBDYWRhIHZhcmlhYmxlIHRpZW5lIHF1ZSB0ZW5lciBzdSBjb2x1bW5hDQoyLiBDYWRhIG9ic2VydmFjacOzbiBkZWJlIGRlIGVzdGFyIGVuIHVuYSBmaWxhDQozLiBDYWRhIHZhbG9yIHRpZW5lIHF1ZSBlc3RhciBlbiB1bmEgY2VsZGENCg0KIyMgVmVudGFqYXMNCg0KMS4gQWwgdGVuZXIgdW5hIGVzdHJ1Y3R1cmEgZXN0w6FuZGFyIGVzIG3DoXMgZsOhY2lsIGFwcmVuZGVyIGxhcyBoZXJyYW1pZW50YXMgcXVlIHV0aWxpemFuIGVzYSBlc3RydWN0dXJhLg0KMi4gQWwgdGVuZXIgdmFyaWFibGVzIGNvbW8gY29sdW1uYXMsIHNlIGxlIHB1ZWRlIHNhY2FyIHByb3ZlY2hvIGEgbGEgbmF0dXJhbGV6YSB2ZWN0b3JpemFkYSBkZSBSLg0KDQojIEVqZXJjaWNpb3MNCg0KUHJpbWVybyBzZSBjYXJnYSBsYXMgbGlicmVyw61hcyBhIHV0aWxpemFyLg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkcikNCmxpYnJhcnkoa25pdHIpI1BhcmEgdW5hIG1lam9yIHZpc3VhbGl6YWNpw7NuIGRlIGxhcyB0YWJsYXMNCmBgYA0KDQpJbXBvcnRhIGxhcyB0YWJsYXMgcXVlIHNlIHZhIGEgdXNhciBwYXJhIHRyYWJhamFyIA0KYGBge3IgbWVzc2FnZT1GQUxTRX0NClRhYmxhNGEgPC0gcmVhZF9jc3YoInRhYmxhNGEuY3N2IikNClRhYmxhNGIgPC0gcmVhZF9jc3YoInRhYmxhNGIuY3N2IikNClRhYmxhMiA8LSByZWFkX2NzdigidGFibGEyLmNzdiIpDQpUYWJsYTMgPC0gcmVhZF9jc3YoInRhYmxhMy5jc3YiKQ0KYGBgDQoNCkxvIHF1ZSBzZSBkZXNlYSBlcyBsbGV2YXIgZXN0YXMgdGFibGFzIGEgdW4gZm9ybWF0byBkZSAqKlRpZHkgRGF0YSoqDQoNCiMjIHBpdm90X2xvbmdlcigpDQoNCkVzdGUgY29tYW5kbyBzZSB1dGlsaXphIGN1YW5kbyBlbiBsYXMgY29sdW1uYXMgc2UgdGllbmUgbG9zIGRhdG9zIGRlIGxhIHZhcmlhYmxlIGNvbW8gZW4gbG9zIGVqZW1wbG9zIHF1ZSBzZSB2ZXLDoW4gYSBjb250aW51YWNpw7NuLg0KDQpMYSBzaWd1aWVudGUgdGFibGEgdGllbmUgdW4gcHJvYmxlbWEsIGVsIGN1YWwgZXMgcXVlIGVuIGxhcyBjb2x1bW5hcyBzZSBlbmN1ZW50cmFuIGRhdG9zIHF1ZSBubyBzb24gdmFyaWFibGVzLCB5IGRlIGVzdGEgbWFuZXJhIG5vIGN1bXBsZW4gY29uIGxhcyByZWdsYXMgaW5kaWNhZGFzIGFudGVzLg0KDQpgYGB7cn0NCmthYmxlKFRhYmxhNGEpDQpgYGANClBhcmEgbG9ncmFyIHNvbHVjaW9uYXIgZXN0ZSBwcm9ibGVtYSB1dGlsaXphcsOhIGVsIHNpZ3VpZW50ZSBjw7NkaWdvDQoNCmBgYHtyfQ0KQ2Fzb3NfZGYgPC0gDQpUYWJsYTRhICU+JSANCiAgcGl2b3RfbG9uZ2VyKGMoIjE5OTkiLCAiMjAwMCIpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAiQcOxb3MiLA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gIkNhc29zIikNCmthYmxlKENhc29zX2RmKQ0KYGBgDQpUYW1iacOpbiBzZSB2ZXJhIGxhIHRhYmxhNGIgcXVlIHRpZW5lIGVsIG1pc21vIHByb2JsZW1hDQoNCmBgYHtyfQ0Ka2FibGUoVGFibGE0YikNCmBgYA0KU2Ugc29sdWNpb25hDQpgYGB7cn0NClBvYmxhY2lvbl9kZiA8LSANClRhYmxhNGIgJT4lIA0KICBwaXZvdF9sb25nZXIoYygiMTk5OSIsICIyMDAwIiksDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJBw7FvcyIsDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiUG9ibGFjacOzbiIpDQprYWJsZShQb2JsYWNpb25fZGYpDQpgYGANCkFob3JhIHNlIHRpZW5lIHF1ZSB1bmlyIGxhcyBkb3MgdGFibGFzIHF1ZSBzZSByZWFsaXrDsywgZXN0byBzZSBsb2dyYSBjb24gYGxlZnRfam9pbmAgbG8gY3VhbCB1dGlsaXphIGxhcyBkb3MgY29sdW1uYXMgcGFyZWNpZGFzIG8gY29sdW1uYXMgbGxhdmVzIHBhcmEgdW5pcmxhcyBlbiBlbCBlamVtcGxvLCBlbiBlc3RlIGNhc28gc29uIGxhcyBjb2x1bW5hcyAqKlBhaXMqKg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFfQ0KZGF0YV9mcmFtZTEgPC0gDQpDYXNvc19kZiAlPiUgDQogIGxlZnRfam9pbihQb2JsYWNpb25fZGYpDQprYWJsZShkYXRhX2ZyYW1lMSkNCmBgYA0KDQojIyBwaXZvdF93aWRlcigpDQpFc3RlIGNvbWFuZG8gc2UgdXRpbGl6YSBjdWFuZG8gdW5hIGNvbHVtbmEgY29udGllbmUgdmFyaWFibGVzIGVudG9uY2VzIGVzdGEgZnVuY2nDs24gcGVybWl0ZSBzYWNhciBkZSB1bmEgY29sdW1uYSBsYXMgdmFyaWFibGVzIHF1ZSBzZSBlbmN1ZW50cmFuIGVuIGVsbGEuDQpFc3RhIGVzIGxhIHRhYmxhIHBhcmEgcXVlIHB1ZWRhbiB2ZXIgZWwgcHJvYmxlbWEuDQpgYGB7cn0NCmthYmxlKFRhYmxhMikNCmBgYA0KU2kgc2UgcHVlZGUgb2JzZXJ2YXIgZW4gVGlwbyBzZSBlbmN1ZW50cmEgdmFyaWFibGVzIGxhcyBjdWFsZXMgc2UgdGllbmUgcXVlIHNhY2FyLiB5IGVzdG8gc2Ugc29sdWNpb25hIGRlIG1hbmVyYSBmw6FjaWwNCg0KYGBge3J9DQpUYWJsYTIgJT4lDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBUaXBvLCB2YWx1ZXNfZnJvbSA9IEN1ZW50YSkNCmBgYA0KRW4gZXN0ZSBjYXNvIG5vIHNlIGNvbG9jw7MgZWwgY29tYW5kbyBga2FibGUoKWAgcG9yIHRhbCBtb3Rpdm8gc2UgbXVlc3RyYSBlc3RlIGZvcm1hdG8gZGUgdGFibGEuDQojIyBzZXBhcmV0ZSgpDQoNCkFob3JhIHNlIHZlcsOhIHVuIHByb2JsZW1hIGNvbiBsYSBjb2x1bW5hIHF1ZSBjb250aWVuZSBpbmZvcm1hY2nDs24gZGUgZG9zIHZhcmlhYmxlcyBjb21vIGVuIGxhIHNpZ3VpZW50ZSB0YWJsYQ0KYGBge3J9DQprYWJsZShUYWJsYTMpDQpgYGANClNlIHB1ZWRlIG9ic2VydmFyIHF1ZSBsYSBjb2x1bW5hIFJhem9uIHRpZW5lIGxvcyBjYXNvcyB5IGxhIHBvYmxhY2nDs24gZW4gdW5hIG1pc21hIGNlbGRhLCBzZSBwcm9jZWRlcsOhIGEgc2VwYXJhciBjb24gZWwgc2lndWllbnRlIGNvbWFuZG8NCg0KYGBge3J9DQpUYWJsYTMgJT4lIA0KICBzZXBhcmF0ZShSYXpvbiwgaW50byA9IGMoIkNhc29zIiwgIlBvYmxhY2nDs24iKSwgc2VwID0gIi8iKQ0KYGBgDQoNCk90cm8gdXNvIGEgYHNlcGFyYXRlKClgDQpgYGB7cn0NCmRhdGFfZnJhbWUyIDwtIA0KVGFibGEzICU+JSANCiAgc2VwYXJhdGUoUmF6b24sIGludG8gPSBjKCJDYXNvcyIsICJQb2JsYWNpw7NuIiksIHNlcCA9ICIvIikgJT4lDQogIHNlcGFyYXRlKEHDsW8sIGludG8gPSBjKCJTaWdsbyIsICJBw7FvIiksIHNlcCA9MikNCmthYmxlKGRhdGFfZnJhbWUyKQ0KYGBgDQoNCiMjIHVuaXRlKCkNCkxvIHF1ZSBwZXJtaXRlIGVzIGp1bnRhciBsYXMgY29sdW1uYXMuDQpgYGB7cn0NCmRhdGFfZnJhbWUyICU+JSANCiAgdW5pdGUobnVldm8sIFNpZ2xvLCBBw7FvLCBzZXA9IiIpDQpgYGANCg0KRXN0ZSBlcyB1biB0YWxsZXIgcmVhbGl6YWRvIGVuIEFjYWRlbWF0aWNhIGVsIG1pc21vIHF1ZSBicmluZG8gdW4gdmlkZW8gZXhwbGljYW5kbyB0b2RvIGxvIGRlIGVzdGUgUk5vdGVib29rLiBFbCBlbmxhY2Ugc2UgZW5jdWVudHJhIGVuIGxhIHBhcnRlIGZpbmFsLg0KDQojIyMgUmVmZXJlbmNpYXMgDQoNCltSIGZvciBEYXRhIFNjaWVuY2VdKGh0dHBzOi8vcjRkcy5oYWQuY28ubnovdGlkeS1kYXRhLmh0bWwpDQoNClRhbGxlciBUaWR5IERhdGEgW0FjYWRlbWF0aWNhXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PXJENlRmcUQwWTRBKQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==