colnames命令产生错误:attribute [13]的长度必须与vector [12]的长度相同

时间:2013-10-22 20:09:12

标签: r

我正在尝试重命名data.frame中的列。但是,当我尝试在R

中运行names或colnames命令时,我不断收到以下错误
Error in names(HourlyTotal)["ZoneElectric"] <- "Meas.Elec" : 
  'names' attribute [13] must be the same length as the vector [12]

以下是我尝试运行的代码:

names(HourlyTotal)["ZoneElectric"] <- "Meas.Elec"

但是,如果我使用列号而不是列名,代码可以正常工作。

names(HourlyTotal)[3] <- "Meas.Elec"

为什么会发生这种情况的任何想法?我感谢任何帮助,因为这让我感到困惑了一段时间。

2 个答案:

答案 0 :(得分:2)

当您撰写names(HourlyTotal)["ZoneElectric"]时,您要求R从向量"ZoneElectric"

中为您提供名为names(HourlyTotal)的元素

但是, names(HourlyTotal)是一个未命名的向量。

你想要的(我猜/假设)是names(HourlyTotal)的元素,其 "ZoneElectric"。如果您碰巧知道向量中的哪个位置发生,那么您可以使用数字索引,就像您已经发现的那样(即names(HourlyTotal)[3])。但是,更强大的解决方案是过滤特定值:

因此,请使用:

names(HourlyTotal)[names(HourlyTotal) == "ZoneElectric"] <- ... 

# Instead of 
#    names(HourlyTotal)["ZoneElectric"] <- ... 

或者您可以使用data.table包中的setnames

library(data.table)
setnames(HourlyTotal, old="ZoneElectric", new="NewName")

答案 1 :(得分:0)

names(HourlyTotal)["ZoneElectric"]应该返回NAnames(HourlyTotal)的结果是一个矢量,您可以按元素编号进行子集。

你为什么不用这样的东西? - setnames(dt,"ZoneElectric","Meas.Elec")