2014-12-05 103 views
2

我在R中有一個表,它有很多列。我想更改列名稱。我發現:在名稱中更改R中的列名不是數字

colnames(table)[123] <- "newName" 

將第123列更改爲名稱「newName」。但爲了實現這一點,我需要找到名稱爲「oldName」的列的編號。我在想這樣的事情:

colnames(table)["oldName"] <- "newName" 

但這並沒有奏效。那麼怎麼去做這件事呢?

+2

'colnames(表)[grep的( '使用oldName',colnames(表))] < - 「newName'' – akrun 2014-12-05 09:25:16

回答

5

它使用dplyr的rename功能是相當簡單:

library(dplyr) 
rename(mtcars, cylinders = cyl) 

這將重命名列「團」是「缸」數據集中「mtcars」。評論後

編輯:

如果要重命名多個列,你可以做(​​不dplyr):

names(mtcars)[names(mtcars) %in% c("mpg", "cyl", "hp")] <- c("miles", "cylinders", "horsepower") 
names(mtcars) 
# [1] "miles"  "cylinders" "disp"  "horsepower" "drat"  
# [6] "wt"   "qsec"  "vs"   "am"   "gear"  
#[11] "carb" 

所以你只需要1行以重命名多個列。當然,您可以將這些名稱存儲在向量中。


注意以人可能關注:雖然這是事實,plyrrename功能,dplyr也有在當前版本CRAN一個0.3.0.2功能rename。它在introduction to dplyr中進行了描述,如果您正在運行當前版本,則只需鍵入?dplyr::rename即可。如果仔細觀察,你甚至可以知道使用哪一個,因爲plyr和dplyr的重命名函數之間存在細微差別:在plyr中,在dplyr中(如我的回答中),它將是plyr::rename(mtcars, c("oldName" = "newName")),它是dplyr::rename(mtcars, newName = oldName)。評論後


編輯由OP:

我無法重現您所描述的錯誤。這是我理解錯了,但是這工作沒有我的情況下,任何錯誤或意外行爲:

df <- data.frame(DE9 = 1:2, code9 = 3:4) 
df 
# DE9 code9 
#1 1  3 
#2 2  4 
dplyr::rename(df, newname = DE9) 
# newname code9 
#1  1  3 
#2  2  4 
+0

對於單個列中,這將是,但如果有多個列重命名 – akrun 2014-12-05 09:33:22

+0

@akrun,是的,我不使用這條路線,如果你想「批量修改」很多列的,你的方法可能會更好。這個對於單列/幾列非常方便。 – 2014-12-05 09:35:38

+0

爲什麼'grep'方法比'rename'更好?兩者似乎都需要每列一行。或者我是假的? – Geoff 2014-12-05 09:41:11

2

看看是否適合你

library(data.table) 
cars = setnames(as.data.table(mtcars), 
       c("mpg", "cyl", "hp"), # old column names 
       c("miles", "cylinders", "horsepower")) # corresponding new column names 
names(cars) 
# [1] "miles"  "cylinders" "disp"  "horsepower" "drat"  "wt"   
# [7] "qsec"  "vs"   "am"   "gear"  "carb" 
setDF(cars) # convert back to data.frame if needed. 
+0

@akrun,對於這樣的任務,獲得的速度可以忽略不計。但語法很容易理解。 – KFB 2014-12-05 10:37:43

1
colnames(table)[colnames(table)=="V1"] <- "VeeOne" 

如果你要堅持基礎R (數據表和dplyr對於初學者來說可能會很棘手,而且如果你有類似的列名,grep可能會失效),只需使用上面的。

完全複製例如:

table <- matrix(1:100, ncol=10) 
colnames(table) <- paste0("V",1:10) 
colnames(table) 
colnames(table)[colnames(table)=="V1"] <- "VeeOne" 
colnames(table) 
1

這不是dplyr你一樣被張貼在這裏,因爲,根據參考手冊之後,它不包括rename。 它代之以普通的plyr,其中包括rename。並且它可以採取名稱字符向量爲重命名:

library(plyr) 
rename(mtcars, c("cyl"="cylinders", "mpg"="miles per gallon", "hp"="horsies"))