2013-04-16 6 views
7

Mam ramki danych, który wygląda tak:Jak nazwać nienazwane pierwszej kolumnie 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 

pamiętać, że od 3 kolumny tylko 2 i 3 są nazwami. Co chcę zrobić, to nazwać pierwszą kolumnę (plus zmienić nazwę na 2 i 3).

Ale dlaczego to polecenie się nie powiodło?

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

Co to jest właściwy sposób?

To dało mi:

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

nie robi” wydaje się być kolumną ... Wygląda na to, że są to nazwy wierszy. Jeśli chcesz je jako kolumny, wykonaj: 'mydf $ bla <- rownames (mydf)' – Arun

+0

Czy to pierwsza "kolumna" po prostu 'rownames'? Spróbuj 'rownames (mydf)'? – thelatemail

+0

to są rownames. ale wydaje mi się, że nie jest dobrym pomysłem użycie ich jako kolumny w ramce danych, ponieważ rownames to metadane, a nie dane? – daikonradish

Odpowiedz

12

Można dołączyć nazwy rząd do dataframe coś takiego:

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

lub, w jednym kroku:

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 
Powiązane problemy