Por Patricio Alarcón, Verónica Carreño y Michelle Martínez

Ideas centrales del texto

El texto, escrito por Hadley Wickham, señala como su problema inicial la gran cantidad de tiempo que se utiliza ordenando data para analizarla a través de las herramientas de R y RStudio.

Para lidiar con este problema, el autor presenta la idea de data tidying o tidy data, es decir, la estructuración de nuestros conjuntos de datos (o data) de modo tal de facilitar su análisis.

El concepto de tidy data nos entrega una forma estandarizada para enlazar la estructura de un conjunto de datos (es decir, su disposición física) con su semántica, es decir, su significado.

Para ello, debemos tener en cuenta los tres principios que definen finalmente a una data estructurada de forma ordenada o tidy, que son los siguientes:

Para entender esta idea, veamos un ejemplo de una data desordenada a la que denominaremos “Piscolas_per_capita”:

 tibble(
  pato_1trimestre = c(120),
  pato_2trimestre = c(99),
  pato_3trimestre = c(89),
  luciano_1trimestre = c(20),
  luciano_2trimestre = c(33),
  luciano_3trimestre = c(5)
)

Como podemos apreciar, los valores resultantes se encuentran todos agrupados en una fila larguísima con seis columnas, la que nos impide ver de forma adecuada la cantidad de piscolas ingeridas por trimestre por cada uno de los participantes en este estudio.

Para ordenar esta data, usaremos algunos de los principios señalados en el paper de Wickham, así como las funcionalidades repasadas en clases:

tidyr::gather(data = Piscolas_per_capita,
              key = "trimestre_por_persona",
              value = "vasos_tomados")

En este caso, hemos disminuido el número de columnas y aumentado el número de filas, a fin de tener nuestra data más ordenada, pero podemos seguir logrando que ella quede más compacta para graficarla de forma adecuada:

tidyr::gather(data = Piscolas_per_capita,
              key = "trimestre_por_persona",
              value = "vasos_tomados") %>% 
  tidyr::separate(trimestre_por_persona, into = c("persona", "periodo"), sep = "_")

Utilizando los conceptos aprendidos, pudimos lograr una data más ordenada, separando a cada persona, periodo y vasos de piscola tomados, a fin de lograr que nuestra data esté, finalmente, tidy.

Utilizando nuestras datas tidy y no tidy

Finalmente, ¿de qué nos sirve la nueva organización de nuestra data inicial? En este caso trabajaremos (en primer término) con dos formas de ver la información: “piscolas_per_capita” y “piscoleros_tidy”, que a continuación se reiteran:

Piscolas_per_capita
piscoleros_tidy

Si quisiéramos, por ejemplo, saber cuál es el consumo promedio de piscolas por trimestre para cada individuo, la forma en la que la data “piscolas_per_capita” está presentada no nos permite acceder de modo directo al promedio buscado, ya que todos los datos se encuentran agrupados en una sola fila y no se separan por ninguna variable (ya sea persona o periodo), por ende no podríamos filtrar esta información, arrojándonos un error.

filter(Piscolas_per_capita, trimestre == 1)
Error in filter_impl(.data, quo) : 
  Evaluation error: object 'trimestre' not found.

Ahora bien, si utilizamos la data “piscoleros_tidy”, que está un poco más ordenada, obtendríamos algo así si quisiéramos filtrar la información

filter(piscoleros_tidy, vasos_tomados == 120)

Si bien fuimos capaces de obtener más información a través de esta forma, igualmente no parece ser suficiente para filtrar los datos que nos interesa obtener, ni mucho menos para agrupar o sumar a través de “group_by” o “summarise”.

Por ello, decidimos utilizar la última forma de agrupar nuestra data, la que denominaremos “piscolas_final”:

piscolas_final

Gracias a esta forma de orden, podemos elegir mucho más fácil y rápidamente las variables que deseamos encontrar:

filter(piscolas_final, persona == "pato")

De esta forma, podemos llegar al dato que nos interesa, ya sea el promedio de vasos de piscola por trimestre tomados por Pato, su mediana, entre otros aspectos que puedan ser de utilidad.

LS0tDQp0aXRsZTogIlRpZHkgRGF0YSINCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6IA0KICAgIGhpZ2hsaWdodDoga2F0ZQ0KICAgIHRoZW1lOiBjZXJ1bGVhbg0KICAgIHRvYzogeWVzDQotLS0NCg0KUG9yIFBhdHJpY2lvIEFsYXJj824sIFZlcvNuaWNhIENhcnJl8W8geSBNaWNoZWxsZSBNYXJ07W5leg0KDQojIyBJZGVhcyBjZW50cmFsZXMgZGVsIHRleHRvDQoNCkVsIHRleHRvLCBlc2NyaXRvIHBvciBbSGFkbGV5IFdpY2toYW1dKGh0dHA6Ly90d2l0dGVyLmNvbS9oYWRsZXl3aWNraGFtKSwgc2XxYWxhIGNvbW8gc3UgcHJvYmxlbWEgaW5pY2lhbCBsYSBncmFuIGNhbnRpZGFkIGRlIHRpZW1wbyBxdWUgc2UgdXRpbGl6YSBvcmRlbmFuZG8gZGF0YSBwYXJhIGFuYWxpemFybGEgYSB0cmF26XMgZGUgbGFzIGhlcnJhbWllbnRhcyBkZSBSIHkgUlN0dWRpby4NCg0KUGFyYSBsaWRpYXIgY29uIGVzdGUgcHJvYmxlbWEsIGVsIGF1dG9yIHByZXNlbnRhIGxhIGlkZWEgZGUgKipkYXRhIHRpZHlpbmcqKiBvICoqdGlkeSBkYXRhKiosIGVzIGRlY2lyLCBsYSBlc3RydWN0dXJhY2nzbiBkZSBudWVzdHJvcyBjb25qdW50b3MgZGUgZGF0b3MgKG8gZGF0YSkgZGUgbW9kbyB0YWwgZGUgZmFjaWxpdGFyIHN1IGFu4Wxpc2lzLg0KDQpFbCBjb25jZXB0byBkZSAqKnRpZHkgZGF0YSoqIG5vcyBlbnRyZWdhIHVuYSBmb3JtYSBlc3RhbmRhcml6YWRhIHBhcmEgZW5sYXphciBsYSBlc3RydWN0dXJhIGRlIHVuIGNvbmp1bnRvIGRlIGRhdG9zIChlcyBkZWNpciwgc3UgZGlzcG9zaWNp824gZu1zaWNhKSBjb24gc3Ugc2Vt4W50aWNhLCBlcyBkZWNpciwgc3Ugc2lnbmlmaWNhZG8uIA0KDQpQYXJhIGVsbG8sIGRlYmVtb3MgdGVuZXIgZW4gY3VlbnRhIGxvcyB0cmVzIHByaW5jaXBpb3MgcXVlIGRlZmluZW4gZmluYWxtZW50ZSBhIHVuYSBkYXRhIGVzdHJ1Y3R1cmFkYSBkZSBmb3JtYSBvcmRlbmFkYSBvICp0aWR5KiwgcXVlIHNvbiBsb3Mgc2lndWllbnRlczoNCg0KKiBDYWRhIGNvbHVtbmEgZXMgdW5hIHZhcmlhYmxlIA0KKiBDYWRhIGZpbGEgZXMgdW5hIG9ic2VydmFjafNuIA0KKiBDYWRhIGNlbGRhIGVzIHVuIHZhbG9yLCBvIHNlYSwgbGEgaW50ZXJzZWNjafNuIGVudHJlIHVuYSBmaWxhIHkgdW5hIGNvbHVtbmEsIGVudHJlIHZhcmlhYmxlIHkgb2JzZXJ2YWNp824gDQoNClBhcmEgZW50ZW5kZXIgZXN0YSBpZGVhLCB2ZWFtb3MgdW4gZWplbXBsbyBkZSB1bmEgZGF0YSBkZXNvcmRlbmFkYSBhIGxhIHF1ZSBkZW5vbWluYXJlbW9zICJQaXNjb2xhc19wZXJfY2FwaXRhIjoNCg0KYGBge3J9DQogdGliYmxlKA0KICBwYXRvXzF0cmltZXN0cmUgPSBjKDEyMCksDQogIHBhdG9fMnRyaW1lc3RyZSA9IGMoOTkpLA0KICBwYXRvXzN0cmltZXN0cmUgPSBjKDg5KSwNCiAgbHVjaWFub18xdHJpbWVzdHJlID0gYygyMCksDQogIGx1Y2lhbm9fMnRyaW1lc3RyZSA9IGMoMzMpLA0KICBsdWNpYW5vXzN0cmltZXN0cmUgPSBjKDUpDQopDQpgYGANCg0KQ29tbyBwb2RlbW9zIGFwcmVjaWFyLCBsb3MgdmFsb3JlcyByZXN1bHRhbnRlcyBzZSBlbmN1ZW50cmFuIHRvZG9zIGFncnVwYWRvcyBlbiB1bmEgZmlsYSBsYXJnde1zaW1hIGNvbiBzZWlzIGNvbHVtbmFzLCBsYSBxdWUgbm9zIGltcGlkZSB2ZXIgZGUgZm9ybWEgYWRlY3VhZGEgbGEgY2FudGlkYWQgZGUgcGlzY29sYXMgaW5nZXJpZGFzIHBvciB0cmltZXN0cmUgcG9yIGNhZGEgdW5vIGRlIGxvcyBwYXJ0aWNpcGFudGVzIGVuIGVzdGUgZXN0dWRpby4NCg0KUGFyYSBvcmRlbmFyIGVzdGEgZGF0YSwgdXNhcmVtb3MgYWxndW5vcyBkZSBsb3MgcHJpbmNpcGlvcyBzZfFhbGFkb3MgZW4gZWwgcGFwZXIgZGUgV2lja2hhbSwgYXPtIGNvbW8gbGFzIGZ1bmNpb25hbGlkYWRlcyByZXBhc2FkYXMgZW4gY2xhc2VzOg0KDQpgYGB7cn0NCnRpZHlyOjpnYXRoZXIoZGF0YSA9IFBpc2NvbGFzX3Blcl9jYXBpdGEsDQogICAgICAgICAgICAgIGtleSA9ICJ0cmltZXN0cmVfcG9yX3BlcnNvbmEiLA0KICAgICAgICAgICAgICB2YWx1ZSA9ICJ2YXNvc190b21hZG9zIikNCmBgYA0KDQpFbiBlc3RlIGNhc28sIGhlbW9zIGRpc21pbnVpZG8gZWwgbvptZXJvIGRlIGNvbHVtbmFzIHkgYXVtZW50YWRvIGVsIG76bWVybyBkZSBmaWxhcywgYSBmaW4gZGUgdGVuZXIgbnVlc3RyYSBkYXRhIG3hcyBvcmRlbmFkYSwgcGVybyBwb2RlbW9zIHNlZ3VpciBsb2dyYW5kbyBxdWUgZWxsYSBxdWVkZSBt4XMgY29tcGFjdGEgcGFyYSBncmFmaWNhcmxhIGRlIGZvcm1hIGFkZWN1YWRhOg0KDQpgYGB7cn0NCnRpZHlyOjpnYXRoZXIoZGF0YSA9IFBpc2NvbGFzX3Blcl9jYXBpdGEsDQogICAgICAgICAgICAgIGtleSA9ICJ0cmltZXN0cmVfcG9yX3BlcnNvbmEiLA0KICAgICAgICAgICAgICB2YWx1ZSA9ICJ2YXNvc190b21hZG9zIikgJT4lIA0KICB0aWR5cjo6c2VwYXJhdGUodHJpbWVzdHJlX3Bvcl9wZXJzb25hLCBpbnRvID0gYygicGVyc29uYSIsICJwZXJpb2RvIiksIHNlcCA9ICJfIikNCmBgYA0KDQpVdGlsaXphbmRvIGxvcyBjb25jZXB0b3MgYXByZW5kaWRvcywgcHVkaW1vcyBsb2dyYXIgdW5hIGRhdGEgbeFzIG9yZGVuYWRhLCBzZXBhcmFuZG8gYSBjYWRhIHBlcnNvbmEsIHBlcmlvZG8geSB2YXNvcyBkZSBwaXNjb2xhIHRvbWFkb3MsIGEgZmluIGRlIGxvZ3JhciBxdWUgbnVlc3RyYSBkYXRhIGVzdOksIGZpbmFsbWVudGUsICoqdGlkeSoqLg0KDQoNCg0KIyMgVXRpbGl6YW5kbyBudWVzdHJhcyBkYXRhcyB0aWR5IHkgbm8gdGlkeQ0KDQpGaW5hbG1lbnRlLCC/ZGUgcXXpIG5vcyBzaXJ2ZSBsYSBudWV2YSBvcmdhbml6YWNp824gZGUgbnVlc3RyYSBkYXRhIGluaWNpYWw/IEVuIGVzdGUgY2FzbyB0cmFiYWphcmVtb3MgKGVuIHByaW1lciB06XJtaW5vKSBjb24gZG9zIGZvcm1hcyBkZSB2ZXIgbGEgaW5mb3JtYWNp8246ICJwaXNjb2xhc19wZXJfY2FwaXRhIiB5ICJwaXNjb2xlcm9zX3RpZHkiLCBxdWUgYSBjb250aW51YWNp824gc2UgcmVpdGVyYW46DQoNCmBgYHtyfQ0KUGlzY29sYXNfcGVyX2NhcGl0YQ0KYGBgDQoNCmBgYHtyfQ0KcGlzY29sZXJvc190aWR5DQpgYGANCg0KU2kgcXVpc2npcmFtb3MsIHBvciBlamVtcGxvLCBzYWJlciBjdeFsIGVzIGVsIGNvbnN1bW8gcHJvbWVkaW8gZGUgcGlzY29sYXMgcG9yIHRyaW1lc3RyZSBwYXJhIGNhZGEgaW5kaXZpZHVvLCBsYSBmb3JtYSBlbiBsYSBxdWUgbGEgZGF0YSAicGlzY29sYXNfcGVyX2NhcGl0YSIgZXN04SBwcmVzZW50YWRhIG5vIG5vcyBwZXJtaXRlIGFjY2VkZXIgZGUgbW9kbyBkaXJlY3RvIGFsIHByb21lZGlvIGJ1c2NhZG8sIHlhIHF1ZSB0b2RvcyBsb3MgZGF0b3Mgc2UgZW5jdWVudHJhbiBhZ3J1cGFkb3MgZW4gdW5hIHNvbGEgZmlsYSB5IG5vIHNlIHNlcGFyYW4gcG9yIG5pbmd1bmEgdmFyaWFibGUgKHlhIHNlYSBwZXJzb25hIG8gcGVyaW9kbyksIHBvciBlbmRlIG5vIHBvZHLtYW1vcyBmaWx0cmFyIGVzdGEgaW5mb3JtYWNp824sIGFycm9q4W5kb25vcyB1biBlcnJvci4NCg0KYGBge3J9DQpmaWx0ZXIoUGlzY29sYXNfcGVyX2NhcGl0YSwgdHJpbWVzdHJlID09IDEpDQpgYGANCg0KQWhvcmEgYmllbiwgc2kgdXRpbGl6YW1vcyBsYSBkYXRhICJwaXNjb2xlcm9zX3RpZHkiLCBxdWUgZXN04SB1biBwb2NvIG3hcyBvcmRlbmFkYSwgb2J0ZW5kcu1hbW9zIGFsZ28gYXPtIHNpIHF1aXNp6XJhbW9zIGZpbHRyYXIgbGEgaW5mb3JtYWNp824NCg0KYGBge3J9DQpmaWx0ZXIocGlzY29sZXJvc190aWR5LCB2YXNvc190b21hZG9zID09IDEyMCkNCmBgYA0KDQpTaSBiaWVuIGZ1aW1vcyBjYXBhY2VzIGRlIG9idGVuZXIgbeFzIGluZm9ybWFjafNuIGEgdHJhdulzIGRlIGVzdGEgZm9ybWEsIGlndWFsbWVudGUgbm8gcGFyZWNlIHNlciBzdWZpY2llbnRlIHBhcmEgZmlsdHJhciBsb3MgZGF0b3MgcXVlIG5vcyBpbnRlcmVzYSBvYnRlbmVyLCBuaSBtdWNobyBtZW5vcyBwYXJhIGFncnVwYXIgbyBzdW1hciBhIHRyYXbpcyBkZSAiZ3JvdXBfYnkiIG8gInN1bW1hcmlzZSIuDQoNClBvciBlbGxvLCBkZWNpZGltb3MgdXRpbGl6YXIgbGEg+mx0aW1hIGZvcm1hIGRlIGFncnVwYXIgbnVlc3RyYSBkYXRhLCBsYSBxdWUgZGVub21pbmFyZW1vcyAicGlzY29sYXNfZmluYWwiOg0KDQpgYGB7cn0NCnBpc2NvbGFzX2ZpbmFsDQpgYGANCg0KR3JhY2lhcyBhIGVzdGEgZm9ybWEgZGUgb3JkZW4sIHBvZGVtb3MgZWxlZ2lyIG11Y2hvIG3hcyBm4WNpbCB5IHLhcGlkYW1lbnRlIGxhcyB2YXJpYWJsZXMgcXVlIGRlc2VhbW9zIGVuY29udHJhcjoNCg0KYGBge3J9DQpmaWx0ZXIocGlzY29sYXNfZmluYWwsIHBlcnNvbmEgPT0gInBhdG8iKQ0KYGBgDQoNCkRlIGVzdGEgZm9ybWEsIHBvZGVtb3MgbGxlZ2FyIGFsIGRhdG8gcXVlIG5vcyBpbnRlcmVzYSwgeWEgc2VhIGVsIHByb21lZGlvIGRlIHZhc29zIGRlIHBpc2NvbGEgcG9yIHRyaW1lc3RyZSB0b21hZG9zIHBvciBQYXRvLCBzdSBtZWRpYW5hLCBlbnRyZSBvdHJvcyBhc3BlY3RvcyBxdWUgcHVlZGFuIHNlciBkZSB1dGlsaWRhZC4NCg0KDQo=