Solución:
El modismo general en el tidyverse es gather()
sus datos al máximo, formando un marco de datos “largo” con una medición por fila. Luego, spread()
puede revertir este largo marco de datos en el formato “ancho” que más le guste. Este procedimiento puede transponer efectivamente los datos: solo gather()
todas las columnas de identificadores excepto los nombres de las filas, y luego spread()
los nombres de las filas.
Por ejemplo, aquí se explica cómo transponer de manera efectiva mtcars
:
require(tidyverse)
mtcars %>%
rownames_to_column %>%
gather(variable, value, -rowname) %>%
spread(rowname, value)
Sus datos no tienen “nombres de fila” como se entiende en R, pero Code1
sirve efectivamente como un nombre de fila porque identifica de forma única cada fila (original) de sus datos.
Df1 <- Df %>%
group_by(Code1, Code2, Level) %>%
summarise_all(funs(count = sum(!is.na(.)))) %>%
gather(column, value, -Code1) %>%
spread(Code1, value)
ACTUALIZAR para tidyr 1.0 o superior (finales de 2019 en adelante)
El nuevo pivot_wider()
y pivot_longer()
Las funciones ahora se prefieren sobre las más antiguas (pero aún son compatibles) gather()
y spread()
. Por lo tanto, la forma preferida de transponer mtcars es probablemente
require(tidyverse)
mtcars %>%
rownames_to_column() %>%
pivot_longer(-rowname, 'variable', 'value') %>%
pivot_wider(variable, rowname)