AQexport 1是我的数据集,需要新的列名称。这是我的解决方案。
# 6 parameters with 11 syntax's to change column names for (each syntax could have up to 40 variations (.site names):
# "Water.Temp.Water.Temp.BUBU" or
# "Water.Temp.Temperature.BUBU" or
# "Water.Temp.Temp.BUBU"<--- Temp.BUBU
# "Water.Temp.Field.Visits.KNF_DUP" <--- FVTemp.KNF_DUP
# "Sp.Cond.Sp.Cond.TempCorrected_nodrift.DRBR" or
# "Sp.Cond.Sp.Cond..TempCorrected_nodrift.BRCD" or
# "Sp.Cond.SpCond.nodrift.TM01" or
# "Sp.Cond.TempCorrected_nodrift.LOD_DUP" <---SpCnd.site
# "Sp.Cond.TempCorrected.PFM" <--- SpC.PFM
# "Sp.Cond.Field.Visits.CC7" <-- FVSpC.CC7
# "Cond.Conductivity.TM02Dup"<-- Cond.TM02Dup
# nchar("Sp.Cond.TempCorrected_nodrift.DRBR") #number of characters in string
#logical vectors, TRUE if AQexport1 column names match charcter input in grepl
Names<-names(AQexport1)
Temp.siteW<-grepl("Water.Temp.Water.Temp", Names)
Temp.siteT<-grepl("Water.Temp.Temperature", Names)
Temp.siteTT<-grepl("Water.Temp.Temp", Names)
FVTemp.site<-grepl("Temp.Field", Names)
FVSpC.site<-grepl("Sp.Cond.Field", Names)
SpCnd.site1<-grepl("Sp.Cond.Sp.Cond.TempCorrected_nodrift.", Names)
SpCnd.site2<-grepl("Sp.Cond.Sp.Cond..TempCorrected_nodrift..", Names)
SpCnd.site3<-grepl("Sp.Cond.SpCond.nodrift.", Names)
SpCnd.site4<-grepl("Sp.Cond.TempCorrected_nodrift.", Names)
Cond.site<-grepl("Cond.C", Names)
SpC.site<-grepl("Sp.Cond.TempCorrected.", Names) #Sp.Cond.TempCorrected. the last period is critical to distinguish from nodrift
#Creating new column name: Paste parameter prefix to site name (extracted from old column name with substring)
#Making parameter always 4 characters
Temp.namesW<-paste("Temp.",substring(Names,23), sep="")
Temp.namesT<-paste("Temp.",substring(Names,24), sep="")
Temp.namesTT<-paste("Temp.",substring(Names,17), sep="")
FVTemp.names<-paste("FTem.",substring(Names,25), sep="")
FVSpC.names<-paste("FSpC.",substring(Names,22), sep="")
SpCnd.names1<-paste("SCnd.",substring(Names,39), sep="")
SpCnd.names2<-paste("SCnd.",substring(Names,40), sep="")
SpCnd.names3<-paste("SCnd.",substring(Names,24), sep="")
SpCnd.names4<-paste("SCnd.",substring(Names,31), sep="")
Cond.names<-paste("Cond.",substring(Names,19), sep="")
SpC.names<-paste("SpCc.",substring(Names,23), sep="")
for (i in 1:ncol(AQexport1)){
if(Temp.siteW[i]){
names(AQexport1)[i]<-Temp.namesW[i]
}
else if(Temp.siteT[i]){
names(AQexport1)[i]<-Temp.namesT[i]
}
else if(Temp.siteTT[i]){
names(AQexport1)[i]<-Temp.namesTT[i]
}
else if(FVTemp.site[i]){
names(AQexport1)[i]<-FVTemp.names[i]
}
else if(FVSpC.site[i]){
names(AQexport1)[i]<-FVSpC.names[i]
}
else if(SpCnd.site1[i]){
names(AQexport1)[i]<-SpCnd.names1[i]
}
else if(SpCnd.site2[i]){
names(AQexport1)[i]<-SpCnd.names2[i]
}
else if(SpCnd.site3[i]){
names(AQexport1)[i]<-SpCnd.names3[i]
}
else if(SpCnd.site4[i]){
names(AQexport1)[i]<-SpCnd.names4[i]
}
else if(Cond.site[i]){
names(AQexport1)[i]<-Cond.names[i]
}
else if(SpC.site[i]){
names(AQexport1)[i]<-SpC.names[i]
}
}
请考虑参考[本讨论](http://stackoverflow.com/q/5963269/1655567)并使您的文章可重现。我认为你正在寻找**'%in%'**,例如:%c(“a”,45)'中的'c(“a”,“b”)%。你的代码看起来在语法上不正确,提供的'contains'就是指对象'contains',还有其他奇怪的东西,'AQexport1'是什么,'AQexport1 [i]'如果'AQexport1'是一个矢量,但我认为,在你的代码的上下文中'AQexport1'对应于一些数据? – Konrad
在重命名列的上下文中,您可以:%c(“mpg”,“cyl”)中的名称(mtcars)[名称(mtcars)%] < - c(“renameThisColumn”)' – Konrad
谢谢Konrad链接。我一定会在以后的文章中提到这一点。我知道colnames生成了一个我可以编制索引的向量,但正如您所指出的那样,我错误地认为我可以替换该向量中的值来更改数据框中的列名称。 – Ecologist711