2011-11-01 11 views
18

ho un grande dataframe, ma piccolo esempio potrebbe essere simile a questo:recepisce una dataframe mantenendo la prima colonna come voce

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

voglio trasporre la dataframe e mantenere la colonna 1 (A) come intestazione di colonna (lettera [1:10]) come nomi di variabili. Quelli che seguono sono tentativi di scratch di codici non riusciti.

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

Grazie;

+1

Non è necessario chiamare 'c' per le sequenze create con i due punti. Quindi '11: 20' è uguale a' c (11:20) ', e' letters [1:10] 'è lo stesso di' c (letters [1:10]) '. –

risposta

38

Ecco un modo

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

Ci sono diversi thread simili, come questo: 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 questo: http://stackoverflow.com/questions/6778908/r-transposing-a-data-frame. Mi piace la tua risposta finora, +1. È semplice, affidabile e continua a essere numerico così com'è. –

5

Qualcosa di simile, forse:

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

Data.table variante da Ramnath, con l'indicazione nella stringa il nome della variabile voleva.

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"]]) 
Problemi correlati