Using forcats
Muestro la utilidad del paquete forcats
para el análisis de variables categóricas y ordinales.Propongo algunos ejemplos con data propia
categóricas y variables ordinales.
migracion %>%
ggplot(aes(quien_es)) + # se visualiza la data tal como está
geom_bar() +
coord_flip()
ordeno las categorías según sus frecuencias
# quienes han migrado
migracion %>%
ggplot(aes(fct_infreq(quien_es))) + #empleo la funcion fct_infreq() del paquete forcats
geom_bar() +
coord_flip()
Hay un conjunto de categorías que no tienen suficientes casos. Las
reuno en una mayor a la que denomino Otros
. Uso “lump()”, aunque se recomienda emplear las
versiones más específicas. Esta que es genérica parece que desaparecerá
pronto:
- fct_lump_min(): para agregar categorías que aparecen un mínimo de veces,
- fct_lump_prop(): para agregar categorías que aparecen por debajo de cierto proporción,
- fct_lump_n(): agrega las categorías menos las que aparecen n número de veces,
- fct_lump_lowfreq(): agrega las categorías que tienen una frecuencia muy baja.
# quienes han migrado
migracion %>%
mutate(quien_es_lump = fct_lump(quien_es, n = 5,
other_level = "Otros")) %>%
count(quien_es_lump, sort = TRUE) %>%
ggplot(aes(quien_es_lump, n)) +
geom_col() +
coord_flip()
Se puede elegir por la frecuencia de la cateoría, por la proporción, etc.
migracion %>%
count(pais_emigro) %>% # I need percentages
na.omit() %>%
filter( n > 2) %>%
mutate(percentage = n/sum(n),
percentage = round(percentage,2)) %>%
# obtengo el valor minimo y maximo para y
mutate(max = cumsum(percentage),
min = c(0, head(max, n=-1))) %>%
mutate(posicion = (max + min) / 2,
etiquetas =paste0(pais_emigro ,":", "\n ",
percentage*100, "%")) %>%
ggplot(aes(ymax = max, ymin = min, xmax=4,
xmin = 3, fill = pais_emigro )) +
geom_rect() +
xlim(c(.1, 4)) +
coord_polar(theta="y") +
geom_text( x=3.5, aes(y=posicion, label=etiquetas), size=1.85,
color = "gray90", fontface = "bold")+
scale_fill_manual(values = c("#ffab18",
"#1380a1",
"#990000",
"#588300")) +
# Try to remove that to understand how the chart is built initially
theme_void() +
theme(legend.position = "none")
LS0tDQp0aXRsZTogIlVzaW5nIGZvcmNhdHMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCkVzdW4gcGFxdWV0ZSBleHRyZW1hZGFtZW50ZSDDunRpbCBwYXJhIHRyYWJhamFyIGNvbiB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIHkgdmFyaWFibGVzIG9yZGluYWxlcy4NCg0KYGBge3J9DQojIHF1aWVuZXMgaGFuIG1pZ3JhZG8NCm1pZ3JhY2lvbiAlPiUgDQogIGdncGxvdChhZXMocXVpZW5fZXMpKSArDQogIGdlb21fYmFyKCkgKw0KICBjb29yZF9mbGlwKCkNCmBgYA0KDQpvcmRlbm8gbGFzIGNhdGVnb3LDrWFzIHNlZ8O6biBzdXMgZnJlY3VlbmNpYXMNCg0KDQpgYGB7cn0NCiMgcXVpZW5lcyBoYW4gbWlncmFkbw0KbWlncmFjaW9uICU+JSANCiAgZ2dwbG90KGFlcyhmY3RfaW5mcmVxKHF1aWVuX2VzKSkpICsNCiAgZ2VvbV9iYXIoKSArDQogIGNvb3JkX2ZsaXAoKQ0KYGBgDQoNCg0KSGF5IHVuIGNvbmp1bnRvIGRlIGNhdGVnb3LDrWFzIHF1ZSBubyB0aWVuZW4gc3VmaWNpZW50ZXMgY2Fzb3MuIExhcyBqdW50byBlbiB1bmEgbWF5b3IuIFVzbyAibHVtcCgpIiwgYXVucXVlIHNlIHJlY29taWVuZGEgZW1wbGVhciBsYXMgdmVyc2lvbmVzIG3DoXMgZXNwZWPDrWZpY2FzLiBFc3RhIHF1ZSBlcyBnZW7DqXJpY2EgcGFyZWNlIHF1ZSBkZXNhcGFyZWNlcsOhIHByb250bzoNCg0K4oCiIGZjdF9sdW1wX21pbigpOiBsdW1wcyBsZXZlbHMgdGhhdCBhcHBlYXIgZmV3ZXIgdGhhbiBtaW4gdGltZXMuDQrigKIgZmN0X2x1bXBfcHJvcCgpOiBsdW1wcyBsZXZlbHMgdGhhdCBhcHBlYXIgaW4gZmV3ZXIgcHJvcCAqIG4gdGltZXMuDQrigKIgZmN0X2x1bXBfbigpIGx1bXBzIGFsbCBsZXZlbHMgZXhjZXB0IGZvciB0aGUgbiBtb3N0IGZyZXF1ZW50IChvciBsZWFzdCBmcmVxdWVudCBpZiBuIDwgMCkNCuKAoiBmY3RfbHVtcF9sb3dmcmVxKCkgbHVtcHMgdG9nZXRoZXIgdGhlIGxlYXN0IGZyZXF1ZW50IGxldmVscywgZW5zdXJpbmcgdGhhdCAib3RoZXIiIGlzIHN0aWxsDQp0aGUgc21hbGxlc3QgbGV2ZWwuDQoNCg0KDQpgYGB7cn0NCiMgcXVpZW5lcyBoYW4gbWlncmFkbw0KbWlncmFjaW9uICU+JQ0KICBtdXRhdGUocXVpZW5fZXNfbHVtcCA9IGZjdF9sdW1wKHF1aWVuX2VzLCBuID0gNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcl9sZXZlbCA9ICJPdHJvcyIpKSAlPiUNCiAgY291bnQocXVpZW5fZXNfbHVtcCwgc29ydCA9IFRSVUUpICU+JSANCiAgZ2dwbG90KGFlcyhxdWllbl9lc19sdW1wLCBuKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgY29vcmRfZmxpcCgpDQoNCmBgYA0KDQpTZSBwdWVkZSBlbGVnaXIgcG9yIGxhIGZyZWN1ZW5jaWEgZGUgbGEgY2F0ZW9yw61hLCBwb3IgbGEgcHJvcG9yY2nDs24sIGV0Yy4NCg0KDQpgYGB7cn0NCm1pZ3JhY2lvbiAlPiUgDQogIGNvdW50KHBhaXNfZW1pZ3JvKSAlPiUgICMgSSBuZWVkIHBlcmNlbnRhZ2VzDQogIG5hLm9taXQoKSAlPiUgDQogZmlsdGVyKCBuID4gMikgJT4lIA0KICBtdXRhdGUocGVyY2VudGFnZSA9IG4vc3VtKG4pLA0KICAgICAgICAgcGVyY2VudGFnZSA9IHJvdW5kKHBlcmNlbnRhZ2UsMikpICU+JSANCiAgIyBvYnRlbmdvIGVsIHZhbG9yIG1pbmltbyAgeSBtYXhpbW8gcGFyYSB5DQogIG11dGF0ZShtYXggPSBjdW1zdW0ocGVyY2VudGFnZSksDQogICAgICAgICBtaW4gPSBjKDAsIGhlYWQobWF4LCBuPS0xKSkpICU+JSANCiAgbXV0YXRlKHBvc2ljaW9uID0gKG1heCArIG1pbikgLyAyLA0KICAgICAgICAgZXRpcXVldGFzID1wYXN0ZTAocGFpc19lbWlncm8gLCI6IiwgIlxuICIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlKjEwMCwgIiUiKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHltYXggPSBtYXgsIHltaW4gPSBtaW4sIHhtYXg9NCwNCiAgICAgICAgICAgICB4bWluID0gMywgZmlsbCA9IHBhaXNfZW1pZ3JvICkpICsNCiAgZ2VvbV9yZWN0KCkgKw0KICB4bGltKGMoLjEsIDQpKSArDQogIGNvb3JkX3BvbGFyKHRoZXRhPSJ5IikgKw0KICBnZW9tX3RleHQoIHg9My41LCBhZXMoeT1wb3NpY2lvbiwgbGFiZWw9ZXRpcXVldGFzKSwgc2l6ZT0xLjg1LA0KICAgICAgICAgICAgIGNvbG9yID0gImdyYXk5MCIsIGZvbnRmYWNlID0gImJvbGQiKSsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZmYWIxOCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMTM4MGExIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM5OTAwMDAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNTg4MzAwIikpICsNCiAgIyBUcnkgdG8gcmVtb3ZlIHRoYXQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYXJ0IGlzIGJ1aWx0IGluaXRpYWxseQ0KICB0aGVtZV92b2lkKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KDQoNCg0KDQo=
No hay comentarios.:
Publicar un comentario