long - Reorganizar el cuadro de datos a una tabla, lo contrario de "derretir"
transpose data frame r (4)
En la base R puedes hacerlo así ...
# get it sorted so that all you need to do is make a matrix out of it
mydf <- mydf[order(mydf$class, mydf$SN),]
# save the unique values of SN
SNu <- unique(mydf$SN)
# combine a matrix with SN
mydfw <- data.frame(SNu, matrix(mydf$myvar, nrow = length(SNu)))
# name your columns
colnames(mydfw) <- c(''SN'', levels(mydf$class))
O, para una expresión más concisa usando agregado
aggregate(myvar~SN, mydf, ''c'')
# column names don''t come out great
colnames(mydfw) <- c(''SN'', levels(mydf$class))
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo reformar los datos de formato largo a ancho? 8 respuestas
Tengo un enorme marco de datos como este:
SN = c(1:100, 1:100, 1:100, 1:100)
class = c(rep("A1", 100), rep("B2", 100), rep("C3", 100), rep("D4", 100)) # total 6000 levels
myvar = rnorm(400)
mydf = data.frame(SN, class, myvar)
Quiero "fundirme" en una tabla con cada nivel como columna individual y myvar en rellenado:
SN A1 B2 C3 D4 .............and so on for all 6000
Cómo puedo lograr esto, sé que es una pregunta simple, pero no pude entenderlo.
Otro enfoque con split
:
mydfSplit <- split(mydf[,-2], mydf$class, drop=TRUE)
El resultado es una lista que se puede convertir fácilmente en un data.frame
si los componentes tienen las mismas dimensiones (lo cual es cierto en este ejemplo):
mydf2 <- do.call(cbind, mydfSplit)
El problema con esta solución es que los nombres del resultado final necesitan una limpieza. Sin embargo, para una información más general, esto puede ser útil si SN
es diferente para cada clase.
> dcast(mydf, SN ~ class)
SN A1 B2 C3 D4
1 1 0.1461258 0.8325014 0.33562088 -0.07294576
2 2 0.5964182 0.4593710 -0.23652803 -1.52539568
3 3 2.0247742 -1.1235963 1.79875447 -1.87462227
4 4 0.8184004 1.3486721 0.76076486 -1.18311991
5 5 -0.6577212 0.3666741 -0.06057506 1.38825487
6 6 0.1590443 0.2043661 0.08161778 0.10421797
...
molten = melt( mydf , id.vars = c( "SN" , "class" ) , measure.vars = "myvar" )
casted = dcast( molten , SN~class )