我正在尝试重命名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"
为什么会发生这种情况的任何想法?我感谢任何帮助,因为这让我感到困惑了一段时间。
答案 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"]
应该返回NA
。 names(HourlyTotal)
的结果是一个矢量,您可以按元素编号进行子集。
你为什么不用这样的东西? -
setnames(dt,"ZoneElectric","Meas.Elec")