我有一个名为“newprice”的数据帧(见下文),我想在R中改变我的程序中的列名。

> newprice
   Chang.  Chang.   Chang.
1     100       36      136
2     120      -33       87
3     150       14      164

事实上,这就是我所做的:

names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice") 

我没有将它放入循环中,因为我希望每个列名都是不同的。

当我把我的程序粘贴到R控制台,这是它给我的输出:

> names(newprice)[1]<-paste(“premium”)
Error: unexpected input in "names(newprice)[1]<-paste(“"
> names(newprice)[2]<-paste(“change”)
Error: unexpected input in "names(newprice)[2]<-paste(“"
> names(newprice)[3]<-paste(“newpremium”)
Error: unexpected input in "names(newprice)[3]<-paste(“"

我同样尝试过使用c()函数——例如c("premium"),而不是paste()函数,但没有用。

有人能帮我弄清楚吗?


当前回答

我有同样的问题,这段代码为我工作。

names(data)[names(data) == "oldVariableName"] <- "newVariableName"

简而言之,这段代码做了以下工作:

Names (data)查看数据框架(data)中的所有名称

[names(data) == oldVariableName]提取你想重命名的变量名(oldVariableName), <- "newVariableName"分配新的变量名。

其他回答

你可以通过以下方法进行编辑:

newprice <- edit(newprice)

并手动更改列名。

与其他相似:

cols <- c("premium","change","newprice")
colnames(dataframe) <- cols

相当简单,易于修改。

使用data.table的一个选项是:

library(data.table)

setDT(dataframe)

setnames(dataframe,'Old1','New1')
setnames(dataframe,'Old2','New2')

这个错误是由“smart-quotes”(或者不管它们叫什么)引起的。这里的教训是,“不要在将引号转换为智能引号的‘编辑器’中编写代码”。

names(newprice)[1]<-paste(“premium”)  # error
names(newprice)[1]<-paste("premium")  # works

此外,你不需要粘贴(“premium”)(调用粘贴是多余的),并且在<-周围放置空格以避免混淆(例如x <- -10;如果(x < 3)"hi" else "bye";x)。

更正一下,稍微扩展一下斯科特·威尔逊的回答。 你可以使用数据。表的setnames也在data.frames上起作用。

不要期望操作速度加快,但是您可以期望setnames在内存消耗方面更有效,因为它通过引用更新列名。这可以跟踪地址功能,见下文。

library(data.table)
set.seed(123)
n = 1e8

df = data.frame(bad=sample(1:3, n, TRUE), worse=rnorm(n))
address(df)
#[1] "0x208f9f00"
colnames(df) <- c("good", "better")
address(df)
#[1] "0x208fa1d8"
rm(df)

dt = data.table(bad=sample(1:3, n, TRUE), worse=rnorm(n))
address(dt)
#[1] "0x535c830"
setnames(dt, c("good", "better"))
address(dt)
#[1] "0x535c830"
rm(dt)

所以,如果你的记忆力快到极限了,你可以考虑用这个来代替。