web-dev-qa-db-ger.com

so ersetzen Sie einen einzelnen Backslash in R

Ich habe eine Zeichenfolge, die wie folgt aussieht:

str<-"a\f\r"

Ich versuche die Backslashes zu entfernen, aber nichts funktioniert:

gsub("\","",str, fixed=TRUE)
gsub("\\","",str)
gsub("(\)","",str)
gsub("([\])","",str)

... im Grunde alle Variationen, die man sich vorstellen kann. Ich habe sogar die string_replace_all-Funktion ausprobiert. IRGENDEINE HILFE??

Ich verwende die R-Version 3.1.1. Mac OSX 10.7; Die Variable dput für eine einzelne Zeichenfolge in meinem Vektor von Zeichenfolgen ergibt:

dput(line)
"ud83d\ude21\ud83d\udd2b"

Ich habe die Datei mit .__ importiert. readLines von einem Standard .txt datei. Der Inhalt der Datei sieht ungefähr so ​​aus: 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 …

Vielen Dank.

19
Tavi

Da es keine direkte Möglichkeit gibt, mit einzelnen Backslashes umzugehen, finden Sie hier die nächste Lösung für das Problem, die von David Arenburg in den Kommentaren bereitgestellt wird

gsub("[^A-Za-z0-9]", "", str) #remove all besides the alphabets & numbers
7
Tavi

Bei der Eingabe von umgekehrten Schrägstrichen über die Tastatur sollten Sie diese immer entgehen.

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

Beachten Sie das, wenn Sie dies tun

str <- "a\f\r"

dann enthält strno Backslashes. Es besteht aus den 3 Zeichen a, \f (die normalerweise nicht druckbar sind, außer als \f und \r (gleich)).

Und um nur eine mögliche Frage abzulegen. Wenn Ihre Daten aus einer Datei gelesen wurden, muss die Datei keine umgekehrten Schrägstriche haben. Zum Beispiel, wenn Sie eine test.txt-Datei haben

a\b\c\d\e\f

und du machst

str <- readLines("test.txt")

dann wird str wie erwartet die Zeichenfolge a\b\c\d\e\f enthalten: 6 Buchstaben, die durch 5 einzelne Backslashes voneinander getrennt sind. Sie müssen jedoch noch type doppelte Backslashes eingeben, wenn Sie damit arbeiten möchten.

str <- gsub("\\", "", str, fixed=TRUE)  # now contains abcdef

Aus dput sieht es aus, als hätten Sie dort UTF-16-kodierten Text, der wahrscheinlich von einem Windows-Computer stammt. Gemäß

es codiert Glyphen in der Supplementary Multilingual Plane , was ziemlich dunkel ist. Ich denke, Sie müssen das Argument encoding="UTF-16" an readLines übergeben, wenn Sie die Datei einlesen.

10
Hong Ooi

Das könnte hilfreich sein :)

require(stringi)
stri_escape_unicode("ala\\ma\\kota")
## [1] "ala\\\\ma\\\\kota"
stri_unescape_unicode("ala\\ ma\\ kota")
## [1] "ala ma kota"
9
bartektartanus

Eine durchaus universelle Lösung ist

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

Danke für den Kommentar oben.

7
Jelena-bioinf

Dies ist die gleiche wie die akzeptierte Antwort, aber es werden weniger (nur Zeichen ohne ASCII-Zeichen) angezeigt:

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