2013-04-16 37 views
7

Tôi có một khung dữ liệu mà trông như thế này:Làm thế nào để đặt tên cho cột đầu tiên giấu tên của một 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 

Lưu ý rằng từ 3 cột chỉ thứ 2 và 3 là những cái tên. Điều tôi muốn làm là đặt tên cho cột đầu tiên (cộng với đổi tên thứ 2 và thứ 3).

Nhưng tại sao lệnh này không thành công?

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

Cách thích hợp để làm điều đó là gì?

Nó đã cho tôi:

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

Nó doesn' t dường như là một cột ... Có vẻ như chúng là tên hàng. Nếu bạn muốn chúng như các cột thì hãy làm: 'mydf $ bla <- rownames (mydf)' – Arun

+0

Đó có phải là "cột" đầu tiên chỉ là 'rownames' không? Thử 'rownames (mydf)'? – thelatemail

+0

đó là những tên gọi. nhưng có vẻ như tôi không phải là một ý tưởng tuyệt vời để sử dụng chúng như một cột trong khung dữ liệu của bạn, vì tên miền là siêu dữ liệu chứ không phải dữ liệu? – daikonradish

Trả lời

12

Bạn có thể tham gia những cái tên hàng để các dataframe, như thế này:

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

Hoặc, trong một bước:

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 
Các vấn đề liên quan