我知道如果我有一个超过1列的数据框,我可以使用
colnames(x) <- c("col1","col2")
Run Code Online (Sandbox Code Playgroud)
重命名列.如果它只是一列,我该怎么做?意味着矢量或数据框中只有一列.
例:
trSamp <- data.frame(sample(trainer$index, 10000))
head(trSamp )
# sample.trainer.index..10000.
# 1 5907862
# 2 2181266
# 3 7368504
# 4 1949790
# 5 3475174
# 6 6062879
ncol(trSamp)
# [1] 1
class(trSamp)
# [1] "data.frame"
class(trSamp[1])
# [1] "data.frame"
class(trSamp[,1])
# [1] "numeric"
colnames(trSamp)[2] <- "newname2"
# Error in names(x) <- value :
# 'names' attribute [2] must be the same length as the vector [1]
Run Code Online (Sandbox Code Playgroud)
小智 523
这是一种通用的方式,您无需记住变量的确切位置:
# df = dataframe
# old.var.name = The name you don't like anymore
# new.var.name = The name you want to get
names(df)[names(df) == 'old.var.name'] <- 'new.var.name'
Run Code Online (Sandbox Code Playgroud)
这段代码几乎可以做到以下几点:
names(df) 查看中的所有名称 df[names(df) == old.var.name] 提取要检查的变量名称<- 'new.var.name' 分配新变量名称.Jos*_*ich 301
colnames(trSamp)[2] <- "newname2"
Run Code Online (Sandbox Code Playgroud)
尝试设置第二列的名称.您的对象只有一列,因此该命令会引发错误.这应该足够了:
colnames(trSamp) <- "newname2"
Run Code Online (Sandbox Code Playgroud)
zon*_*jie 78
colnames(df)[colnames(df) == 'oldName'] <- 'newName'
Run Code Online (Sandbox Code Playgroud)
Ric*_*rta 71
这是一个老问题,但值得注意的是,您现在可以setnames从data.table包中使用.
library(data.table)
setnames(DF, "oldName", "newName")
# or since the data.frame in question is just one column:
setnames(DF, "newName")
# And for reference's sake, in general (more than once column)
nms <- c("col1.name", "col2.name", etc...)
setnames(DF, nms)
Run Code Online (Sandbox Code Playgroud)
ale*_*ion 50
这也可以使用Hadley的plyr软件包和rename功能来完成.
library(plyr)
df <- data.frame(foo=rnorm(1000))
df <- rename(df,c('foo'='samples'))
Run Code Online (Sandbox Code Playgroud)
您可以通过名称重命名(不知道位置)并一次执行多次重命名.例如,在完成合并之后,您最终可能会:
letterid id.x id.y
1 70 2 1
2 116 6 5
3 116 6 4
4 116 6 3
5 766 14 9
6 766 14 13
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下步骤重命名:
letters <- rename(letters,c("id.x" = "source", "id.y" = "target"))
letterid source target
1 70 2 1
2 116 6 5
3 116 6 4
4 116 6 3
5 766 14 9
6 766 14 13
Run Code Online (Sandbox Code Playgroud)
Lui*_*uez 33
我认为重命名列的最佳方法是使用dplyr包,如下所示:
require(dplyr)
df = rename(df, new_col01 = old_col01, new_col02 = old_col02, ...)
Run Code Online (Sandbox Code Playgroud)
它在重命名任何数据集中的一列或多列时的工作方式相同.
jsh*_*erd 11
我喜欢下一个逐个重命名数据框列名的样式.
colnames(df)[which(colnames(df) == 'old_colname')] <- 'new_colname'
Run Code Online (Sandbox Code Playgroud)
哪里
which(colnames(df) == 'old_colname')
Run Code Online (Sandbox Code Playgroud)
返回特定列的索引.
Moo*_*per 11
我发现重命名单个列的最方便的方法是使用dplyr::rename_at:
library(dplyr)
cars %>% rename_at("speed",~"new") %>% head
cars %>% rename_at(vars(speed),~"new") %>% head
cars %>% rename_at(1,~"new") %>% head
# new dist
# 1 4 2
# 2 4 10
# 3 7 4
# 4 7 22
# 5 8 16
# 6 9 10
Run Code Online (Sandbox Code Playgroud)
尝试:
colnames(x)[2] <- 'newname2'
Run Code Online (Sandbox Code Playgroud)
小智 6
让 df 成为您拥有的数据框,col 名称为 myDays 和 temp。如果要将“myDays”重命名为“Date”,
library(plyr)
rename(df,c("myDays" = "Date"))
Run Code Online (Sandbox Code Playgroud)
或者用管道,你可以
dfNew <- df %>%
plyr::rename(c("myDays" = "Date"))
Run Code Online (Sandbox Code Playgroud)
这可能已经存在了,但是我在寻找解决方案时正在重命名字段并一时兴起尝试了这个。为我的目的工作。
Table1$FieldNewName <- Table1$FieldOldName
Table1$FieldOldName <- NULL
Run Code Online (Sandbox Code Playgroud)
编辑从这里开始......
这也有效。
df <- rename(df, c("oldColName" = "newColName"))
Run Code Online (Sandbox Code Playgroud)
您可以rename.vars在gdata包中使用.
library(gdata)
df <- rename.vars(df, from = "oldname", to = "newname")
Run Code Online (Sandbox Code Playgroud)
如果您要更改多个变量名称,或者想要将某些文本追加或预先添加到变量名称,则此功能特别有用,那么您可以执行以下操作:
df <- rename.vars(df, from = c("old1", "old2", "old3",
to = c("new1", "new2", "new3"))
Run Code Online (Sandbox Code Playgroud)
有关将文本附加到变量名称子集的示例,请参阅:https: //stackoverflow.com/a/28870000/180892