3

我正在尝试重命名 data.frame 中的列。但是,当我尝试在 R 中运行名称或 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"

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

4

2 回答 2

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"] <- ... 

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

library(data.table)
setnames(HourlyTotal, old="ZoneElectric", new="NewName")
于 2013-10-22T20:30:44.220 回答
0

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

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

于 2013-10-22T20:13:25.733 回答