我有一个名为“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()
函数,但无济于事 .
有人能帮我解决这个问题吗?
16 回答
如果我们有2个数据帧,则以下工作
我们更改DF1的名称如下
如果只知道旧列名称时需要一次重命名除多列以外的所有列,则可以使用
colnames
function和%in%
operator . 例:现在你想把“坏”和“最坏”改为“好”和“最好” . 您可以使用
这导致了
我用这个:
该错误是由“智能引号”(或称为它们)引起的 . 这里的教训是,“不要在'编辑器'中编写代码,将引号转换为智能引号” .
此外,您不需要
paste("premium")
(对paste
的调用是多余的)并且最好在<-
周围放置空格以避免混淆(例如x <- -10; if(x<-3) "hi" else "bye"; x
) .dplyr::rename()
和dplyr::select()
有两个选项:对于所有列名称,还有三个范围的
dplyr::rename()
:dplyr::rename_all()
变体,dplyr::rename_if()
用于有条件地定位列名称,dplyr::rename_at()
用于选择命名列 . 以下示例使用下划线替换空格和句点,并将所有内容转换为小写:dplyr::select_all()
也可以类似的方式使用:新建议的方法是使用
setNames
函数 . 见?setNames
. 由于这会创建data.frame
的新副本,请确保将结果分配给原始data.frame
,如果这是您的意图 .如果您使用早期答案建议的某些方式使用
colnames
,则较新版本的R会给您警告 .如果这是
data.table
,您可以使用data.table
函数setnames
,它可以通过引用修改特定列名或单个列名:您可以通过以下方式进行编辑:
并手动更改列名称 .
这可能会有所帮助:
DF = rename.columns(DF,列表(old.column = 'new.column.name'))
你可以直接做完了
您正在使用的粘贴命令至少需要2个参数 . 它的工作方式类似于excel中的连接函数,这就是为什么它会给你一个错误 .
你有没有尝试过:
names(newprice)[1]<-"premium"
?
尝试:
我的专栏名称如下
我想更改Class和Sex的列名
我有同样的问题,这段代码为我解决了 .
简而言之,此代码执行以下操作:
names(data)
查看数据框中的所有名称(data
)[names(data) == oldVariableName]
提取要重命名的变量名称(oldVariableName
),<- "newVariableName"
分配新变量名称 .只是为了纠正并略微扩展Scott Wilson的答案 .
您也可以在data.frames上使用data.table的
setnames
函数 .不要指望操作加速,但是你可以期望
setnames
更有效地消耗内存,因为它通过引用更新列名 . 可以使用address
功能跟踪此功能,如下所示 .因此,如果你达到内存限制,你可以考虑使用这个 .
使用
colnames()
功能:你也可以分组:
与其他人类似:
非常简单易于修改 .