2013-04-16 82 views
7

的無名第一列我有一個數據幀,看起來像這樣:如何命名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 

需要注意的是,從3分列第2和第3名是。 我想要做的是命名第一列(加上重命名第二和第三)。

但爲什麼這個命令失敗?

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

什麼是正確的做法?

它給了我:

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

一點也沒有」 t似乎是一個專欄......看起來他們是排名。如果你想讓他們作爲列,那麼做:'mydf $ bla < - rownames(mydf)' – Arun

+0

這是第一個「列」只是'rownames'?試試'rownames(mydf)'? – thelatemail

+0

這些是rownames。但在我看來,將它們用作數據框中的列並不是一個好主意,因爲rownames是元數據,而不是數據? – daikonradish

回答

12

你可以加入行名稱的數據幀,這樣的:

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

,或者在一個步:

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