web-dev-qa-db-fra.com

comment remplacer une simple barre oblique inverse dans R

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.

19
Tavi

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
7
Tavi

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.

10
Hong Ooi

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"
9
bartektartanus

Une solution assez universelle est

gsub("\\\\", "", str)

Merci au commentaire ci-dessus.

7
Jelena-bioinf

Ceci est identique à la réponse acceptée mais supprime moins (uniquement les caractères non asciis):

gsub("[^ -~]", '', "a\f\r") 
## [1] "a"
1
Tyler Rinker