2011-11-01 9 views
18

que tienen una gran trama de datos, pero pequeño ejemplo sería la siguiente:de transposición de una trama de datos se mantiene la primera columna como en dirección

mydf <- data.frame(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50)) 

Quiero transposición de la trama de datos y mantener la columna 1 (A) como encabezamiento de la columna (letra [1:10]) como nombres de variables. Los siguientes son ensayos de cero de códigos fallidos.

tmydf = data.frame(t(mydf)) 
names(tmydf) <- tmydf[1,] 

Gracias;

+1

No necesita llamar 'c' para las secuencias creadas con dos puntos. Así que '11: 20' es lo mismo que' c (11:20) ', y' letters [1:10] 'es lo mismo que' c (letters [1:10]) '. –

Respuesta

38

Aquí es una manera

tmydf = setNames(data.frame(t(mydf[,-1])), mydf[,1]) 
+0

Existen varios hilos similares, como este: http://stackoverflow.com/questions/6645524/what-is-the-best-way-to-transpose-a-data-frame-in-r-and-to- set-one-of-the-column o esto: http://stackoverflow.com/questions/6778908/r-transposing-a-data-frame. Me gusta tu respuesta hasta ahora, +1. Es simple, confiable y mantiene el valor numérico tal como es. –

5

Algo como esto quizá:

tmp <- as.data.frame(t(mydf[,-1])) 
> colnames(tmp) <- mydf$A 
> tmp 
    a b c d e f g h i j 
M1 11 12 13 14 15 16 17 18 19 20 
M2 31 32 33 34 35 36 37 38 39 40 
M3 41 42 43 44 45 46 47 48 49 50 
1

variante Data.table de Ramnath con indicando en cadena de la variable nombre quería.

mydf <- data.table(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50)) 
tmydf <- setNames(data.table(t(mydf[,-"A"])), mydf[["A"]]) 
Cuestiones relacionadas