2017-08-11 1 views
0

Je souhaite nettoyer les chaînes afin qu'elles puissent être analysées en tant que symboles juridiques uniques. J'ai l'intention de nettoyer beaucoup de chaînes, donc il y a un risque indésirable de symboles dupliqués dans la sortie. Il suffirait de prendre chaque caractère illégal et de le remplacer par son encodage de base 32. Comportement souhaité:Désinfecter des chaînes pour des symboles légaux uniques dans R

sanitize("_bad_symbol$not*a&list%$('") 
## [1] "L4bad_symbolEQnotFIaEYlistEUSCQJY" 

Je pense que tout ce que je besoin est une liste complète des caractères possibles pour grep. Je sais à propos de letters et LETTERS, mais qu'en est-il de tout le reste?

Est-ce qu'une meilleure solution existe déjà? Parce que j'aimerais ça.

EDIT: trouvé juste à propos de de this post. Je pourrais y aller à la rigueur, mais je préférerais ne pas le faire.

+0

* « Est-ce une meilleure solution existe déjà? Parce que j'aimerais ça. » * Semble contredire * « Je pourrais aller avec [' make.names'] dans un pincement, mais je préfère ne pas. » * Qu'est-ce qui est insatisfaisant à propos de 'make.names'? Peut-être que vous pouvez modifier le code de 'make.names' pour répondre à vos besoins? – Gregor

+0

Vous avez raison. J'étais trop fixé sur une solution différente. Just make 'make.unique()' aussi, et 'make.unique (make.names (...))' résout vraiment le problème. – landau

+0

'make.names()' seul introduirait des conflits. C'était le peu insatisfaisant. – landau

Répondre

0

Avec make.names() et make.unique() ensemble, le problème est résolu.

make.unique(make.names(c("asdflkj#@#$", "asdflkj####"))) 
## [1] "asdflkj...." "asdflkj.....1" 
+0

Aussi: 'make.names (..., unique = TRUE)'. Juste appris à ce sujet. – landau