2013-04-16 15 views
7

Ho un frame di dati che assomiglia a questo:Come nominare la prima colonna senza nome di un data.frame

> mydf 
        val1  val2 
hsa-let-7a   2.139890 -0.03477569 
hsa-let-7b   2.102590 0.04108795 
hsa-let-7c   2.061705 0.02375882 
hsa-let-7d   1.938950 -0.04364545 
hsa-let-7e   1.889000 -0.10575235 
hsa-let-7f   2.264296 0.08465690 

notare che dal 3 colonne solo 2 ° e 3 ° sono nomi. Quello che voglio fare è nominare la prima colonna (più rinominare il 2 ° e il 3 °).

Ma perché questo comando non è riuscito?

colnames(mydf) <- c("COL1","VAL1","VAL2"); 

Qual è il modo giusto per farlo?

mi ha dato:

Error in `colnames<-`(`*tmp*`, value = c("COL1", "VAL1", "VAL2" : 
    'names' attribute [3] must be the same length as the vector [2] 
+8

E doesn' Sembra una colonna ... Sembra che siano nomi di fila. Se li vuoi come colonne, allora fai: 'mydf $ bla <- rownames (mydf)' – Arun

+0

È quella prima "colonna" solo i 'rownames'? Prova 'rownames (mydf)'? – thelatemail

+0

quelli sono rownames. ma mi sembra di non essere una buona idea usarli come colonna nel tuo dataframe, dato che i rownames sono metadati, non dati? – daikonradish

risposta

12

Si potrebbe unire i nomi fila al dataframe, come questo:

mydf <- cbind(rownames(mydf), mydf) 
rownames(mydf) <- NULL 
colnames(mydf) <- c("COL1","VAL1","VAL2") 

O, in un solo passaggio:

setNames(cbind(rownames(mydf), mydf, row.names = NULL), 
     c("COL1", "VAL1", "VAL2")) 
#   COL1  VAL1  VAL2 
# 1 hsa-let-7a 2.139890 -0.03477569 
# 2 hsa-let-7b 2.102590 0.04108795 
# 3 hsa-let-7c 2.061705 0.02375882 
# 4 hsa-let-7d 1.938950 -0.04364545 
# 5 hsa-let-7e 1.889000 -0.10575235 
# 6 hsa-let-7f 2.264296 0.08465690 
Problemi correlati