names(mydat)[c(name)]<-c("newname")
De cela, je sais que le nom de colonne / variable "nom" de la trame de données mydat est remplacé par "nouveau nom".
Ma question est de savoir si, je veux le faire par une boucle afin d'avoir quelque chose comme:
newname1 newname2 newname3 newname4 et ainsi de suite, comment faire?
C'est ce qui a fonctionné et n'a pas fonctionné:
for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}
Existe-t-il un moyen de coder cela? un grand merci à tous ceux qui pourraient être utiles. Owusu Isaac
ugly_vars <- names(dplyr::select(df, starts_with("abcde_")))
names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
Réponses:
La solution la plus évidente serait de changer votre code dans la boucle for avec ce qui suit:
Mais vous devez clarifier votre variable
name
. Pour le moment, cette boucle fera 4 renommages de la colonne unique.En général, si les noms que vous souhaitez modifier sont vectoriels, il s'agit d'une procédure de sous-ensemble standard:
la source
Essayez d'utiliser
sprintf
oupaste
, comme ceci:Notez également que le
names(mydat)[c(name)]
est plus ou moins un non-sens;c(name)
équivaut à écrire justename
et signifie "obtenir la valeur de la variable appeléename
'; le crochet extraira au moins les éléments denames(mydat)
mais uniquement si laname
variable contient un index numérique ou booléen.Si vous souhaitez remplacer les colonnes appelées
name
parname1, name2, ..., nameN
, utilisez quelque chose comme ceci:EDIT: Eh bien, si vous souhaitez simplement supprimer les noms de colonnes en double, il existe un moyen encore plus simple; R a une
make.names
fonction qui résout ce problème; il peut être utilisé comme ceci:Encore plus court, le même ne peut être obtenu qu'en écrivant:
la source
grepl
serait OK pour faire le travail plus général.J'ai eu le même problème et je l'ai résolu avec ce code:
la source