wide long gather funcion data r dataframe reshape

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í:

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 )