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