Stack Overflow en español Asked by iav on December 9, 2020
tengo un dataframe (df) que contiene fechas de nacimiento entre otras muchas cosas. Quiero tener una relación de totales por edad de manera que las columnas sean cada uno de las edades (por año) y la fila sea el total de elementos que tienen esa edad.
La edad la calculo sobre la marcha con difftime, y la uso para agrupar y filtrar. El resultado, antes de spread() es una columna edad y una columna cuantos con los contadores correctos.
# A tibble: 16 x 2
edat quants
<dbl> <int>
1 2 10509
2 3 13461
3 4 13488
Pero, al pasar la información a spread me genera las edades como nombres de columna y los totales para cada columna pero he perdido los nombres de las filas:
`2` `3` `4` `5` `6` `7` `8` `9` `10` `11` `12` `13` `14` `15` `16` `17`
10509 13461 13488 13843 13717 13577 13786 13986 13870 13805 14342 13801 14106 13792 13948 13714
Quiero poder tener algo parecido a:
Edad `2` `3` `4` `5` `6` `7` `8` `9` `10` `11` `12` `13` `14` `15` `16`
Total 10509 13461 13488 13843 13717 13577 13786 13986 13870 13805 14342 13801 14106 13792 13948
Probablemente sea una tontería pero no sé cómo hacerlo. Soy nuevo en R
edad_2_17 <- df %>%
mutate(edad = round(as.numeric(difftime(Sys.Date(),df$FECHANAC, unit = "days"))/(365.25),0)) %>%
group_by(edad) %>%
summarise (cuantos = n()) %>%
filter(between(edad, 2.0,17.0)) %>%
spread(edad,cuantos)
Saludos
Entiendo que lo que buscas, más que un spread()
es una transposición, que puedes implementar con la función t()
:
tribble(
~edad, ~cuantos,
2, 10509,
3, 13461,
4, 13488
) -> df
df %>%
t() %>% # Transponemos filas x columnas -> matrix
as_tibble(rownames = "row_names") # matrix -> df (rownames a columna)
# A tibble: 2 x 4
row_names V1 V2 V3
<chr> <dbl> <dbl> <dbl>
1 edad 2 3 4
2 cuantos 10509 13461 13488
Answered by Patricio Moracho on December 9, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP