按名称而不是按数字更改R中的列名

时间:2014-12-05 09:23:58

标签: r

我在R中有一个包含许多列的表。我想更改列名称。我发现:

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

将第123列更改为名称&#34; newName&#34;。但要实现这一点,我需要找到名称为&#34; oldName&#34;的列号。我在考虑这样的事情:

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

但那并没有奏效。那怎么可以这样做呢?

4 个答案:

答案 0 :(得分:5)

使用dplyr的rename功能非常简单:

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

这将重命名列&#34; cyl&#34;成为&#34;气瓶&#34;在数据集&#34; mtcars&#34;。

评论后编辑:

如果要重命名多个列,可以执行(不使用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行来重命名多个列。当然,您可以将这些名称存储在矢量中。


请注意与之关注的对象:虽然 plyr 确实具有rename功能,但 dplyr 也有 a rename功能在其当前的CRAN版本0.3.0.2中。 introduction to dplyr中对此进行了描述,如果您正在运行当前版本,则只需键入?dplyr::rename即可。如果你仔细观察,你甚至可以分辨出哪一个被使用,因为plyr和dplyr的重命名函数之间存在细微差别:在plyr中,它将是plyr::rename(mtcars, c("oldName" = "newName")) dplyr(就像我的回答一样)是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

答案 1 :(得分: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.

答案 2 :(得分: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)

答案 3 :(得分:1)

根据参考手册,它不是​​dplyr,而是rename。 它是普通的plyr,包含rename。它可以采用名称字符向量进行重命名:

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