在名称中更改R中的列名不是数字
我在R中有一个表,它有很多列。我想更改列名称。我发现:在名称中更改R中的列名不是数字
colnames(table)[123] <- "newName"
将第123列更改为名称“newName”。但为了实现这一点,我需要找到名称为“oldName”的列的编号。我在想这样的事情:
colnames(table)["oldName"] <- "newName"
但这并没有奏效。那么怎么去做这件事呢?
它使用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行以重命名多个列。当然,您可以将这些名称存储在向量中。
注意以人可能关注:虽然这是事实,plyr有rename
功能,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
看看是否适合你
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.
@akrun,对于这样的任务,获得的速度可以忽略不计。但语法很容易理解。 – KFB 2014-12-05 10:37:43
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)
这不是dplyr
你一样被张贴在这里,因为,根据参考手册之后,它不包括rename
。 它代之以普通的plyr
,其中包括rename
。并且它可以采取名称字符向量为重命名:
library(plyr)
rename(mtcars, c("cyl"="cylinders", "mpg"="miles per gallon", "hp"="horsies"))
'colnames(表)[grep的( '使用oldName',colnames(表))] akrun 2014-12-05 09:25:16