J'ai une fonction qui est destinée à opérer sur des données obtenues à partir d'une variété de sources avec de nombreux champs de saisie manuelle. Comme je ne sais pas à quoi m'attendre en ce qui concerne la mise en page ou la convention d'appellation utilisée dans ces fichiers, je veux qu'elle "scanne" un cadre de données à la recherche de colonnes contenant la chaîne de caractères "fix", "name" ou "agent", et qu'elle transforme la colonne en une nouvelle colonne portant le nom "Firm", puis qu'elle procède à un nettoyage des chaînes de caractères sur les entrées de cette colonne, et enfin qu'elle supprime la colonne d'origine. J'ai réussi à le faire fonctionner avec CERTAINS des CSV que j'ai déjà, mais j'ai maintenant rencontré cette erreur : SEULES LES CHAÎNES PEUVENT ÊTRE CONVERTIES EN SYMBOLES. J'ai consulté ce fil de discussion ERREUR : Seules les chaînes de caractères peuvent être converties en symboles mais en vain.
Voici la fonction actuelle :
clean_firm_names2 <- function(df){
df <- df %>%
mutate(Firm := !!rlang::sym(grep(pattern = '(AGENT)|(NAME)|(FIX)',x = colnames(.), ignore.case = T, value = T)) %>%
str_replace_all(pattern = "(\\W)+"," ") %>%
...str manipulations...
str_squish()) %>%
dplyr::select(-(!!rlang::sym(grep(pattern = '(AGENT)|(NAME)|(FIX)',x = colnames(.), ignore.case = T, value = T))))
return(df)
}
J'ai essayé d'utiliser as.character() autour de la fonction grep() mais cela n'a pas résolu le problème. J'ai regardé le CSV sur lequel la fonction est censée opérer et tous les noms de colonnes sont des chaînes de caractères. J'ai lu le CSV en utilisant vroom() comme pour mes autres CSV, et cela fonctionne bien, tous les noms de colonnes apparaissent. Je peux effectuer d'autres dplyr sur le df, ce qui me laisse penser que le df se comporte normalement par ailleurs. Je suis à court d'idées pour expliquer pourquoi la fonction ne s'arrête que sur CERTAINS de mes CSV, alors qu'elle fonctionne comme prévu sur les autres. Quelqu'un a-t-il rencontré des problèmes similaires ou a-t-il des indices sur ce qui pourrait causer cette erreur ? C'est la première fois que j'utilise SO - je suis désolé si cette question n'est pas très claire. J'essaierai de la modifier si nécessaire.
Gracias.