Problema
Deseamos transformar un data frame de formato largo a ancho. Partimos del siguiente data frame:
name numbers value
1 firstName 1 -0.3016990
2 firstName 2 0.4782982
3 firstName 3 -0.3274221
4 firstName 4 0.8950889
5 secondName 1 -1.3476795
6 secondName 2 -0.4671124
7 secondName 3 -1.0883609
8 secondName 4 1.8702156
Y queremos llegar a este otra. Con name como nombres de filas, cuatro columnas basadas en numbers y como valores, values.
X1 X2 X3 X4
firstName -0.301699 0.4782982 -0.3274221 0.8950889
secondName -1.347680 -0.4671124 -1.0883609 1.8702156
dat1 <- structure(list(name = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L), .Label = c("firstName", "secondName"), class = "factor"),
numbers = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), value = c(-0.301698990300544,
0.47829821507312, -0.327422119821659, 0.895088877410118,
-1.3476795169412, -0.467112422933039, -1.08836089961649,
1.87021564288651)), .Names = c("name", "numbers", "value"
), row.names = c(NA, -8L), class = "data.frame")
Solución
Empleamos la función unstack para transformar de formato largo a ancho. En el primer argumento, indicamos el data frame, en el argumento form una fórmula, a la izquierda de ~ el vector que deseamos desapilar —unstack— (value) y a la derecha los grupos que queremos crear (numbers). Finalmente, renombramos los nombres de las filas.
df <- unstack(dat1, form = value ~ numbers)
rownames(df) <- unique(dat1$name)
df
X1 X2 X3 X4
firstName -0.301699 0.4782982 -0.3274221 0.8950889
secondName -1.347680 -0.4671124 -1.0883609 1.8702156
Entradas relacionadas
- Convertir de formato largo a ancho usando una función de agregación en R
- Tablas de contingencia en R
- Transformar tabla de contingencia en tabla de de frecuencias
Referencias
No hay comentarios:
Publicar un comentario