J'ai une chaîne qui ressemble à:
str<-"a\f\r"
J'essaie de supprimer les barres obliques inverses mais rien ne fonctionne:
gsub("\","",str, fixed=TRUE)
gsub("\\","",str)
gsub("(\)","",str)
gsub("([\])","",str)
... fondamentalement toutes les variations que vous pouvez imaginer. J'ai même essayé la fonction string_replace_all
. DE L'AIDE??
J'utilise R version 3.1.1; Mac OSX 10.7; la dput
pour une seule chaîne dans mon vecteur de chaînes donne:
dput(line)
"ud83d\ude21\ud83d\udd2b"
J'ai importé le fichier en utilisant readLines
d'un standard .txt
fichier. Le contenu du fichier ressemble à quelque chose comme:
got an engineer booked for this afternoon \ud83d\udc4d all now hopefully sorted\ud83d\ude0a I m going to go insane ud83d\ude21\ud83d\udd2b in utf8towcs …
Merci.
Comme il n’existe aucun moyen direct de traiter les antislash simples, voici la solution la plus proche du problème, fournie par David Arenburg dans la section commentaires.
gsub("[^A-Za-z0-9]", "", str) #remove all besides the alphabets & numbers
Lorsque vous entrez des barres obliques inverses à partir du clavier, échappez-les toujours.
str <-"this\\is\\my\\string" # note doubled backslashes -> 'this\is\my\string'
gsub("\\", "", str, fixed=TRUE) # ditto
str2 <- "a\\f\\r" # ditto -> 'a\f\r'
gsub("\\", "", str2, fixed=TRUE)# ditto
Notez que si vous le faites
str <- "a\f\r"
alors str
contient no des barres obliques inverses. Il est composé des 3 caractères a
, \f
(qui ne sont normalement pas imprimables, à l'exception de \f
et de \r
(identiques).
Et juste pour éviter une question possible. Si vos données ont été lues à partir d’un fichier, il n’est pas nécessaire que le fichier comporte deux barres obliques inversées. Par exemple, si vous avez un fichier test.txt
contenant
a\b\c\d\e\f
et vous faites
str <- readLines("test.txt")
alors str
contiendra la chaîne a\b\c\d\e\f
comme vous le souhaitiez: 6 lettres séparées par 5 barres obliques inverses simples. Mais vous devez toujours type doubler les barres obliques inverses si vous voulez travailler avec.
str <- gsub("\\", "", str, fixed=TRUE) # now contains abcdef
De la dput
, il semble que ce que vous avez là est un texte codé en UTF-16, qui provient probablement d’une machine Windows. Selon
il code les glyphes dans le plan multilingue supplémentaire , ce qui est assez obscur. Je suppose que vous devez fournir l'argument encoding="UTF-16"
à readLines
lorsque vous lisez le fichier.
Cela pourrait être utile :)
require(stringi)
stri_escape_unicode("ala\\ma\\kota")
## [1] "ala\\\\ma\\\\kota"
stri_unescape_unicode("ala\\ ma\\ kota")
## [1] "ala ma kota"
Une solution assez universelle est
gsub("\\\\", "", str)
Merci au commentaire ci-dessus.
Ceci est identique à la réponse acceptée mais supprime moins (uniquement les caractères non asciis):
gsub("[^ -~]", '', "a\f\r")
## [1] "a"