web-dev-qa-db-ja.com

Rの単一のバックスラッシュを置き換える

私は次のような文字列を持っています:

str<-"a\f\r"

私はバックスラッシュを削除しようとしていますが、何も機能しません:

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

...基本的に想像できるすべてのバリエーション。 string_replace_all関数も試しました。何か助け??

Rバージョン3.1.1を使用しています。 Mac OSX 10.7;文字列のベクトル内の単一の文字列のdputは次のようになります。

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

標準の.txtファイルからreadLinesを使用してファイルをインポートしました。ファイルの内容は次のようになります。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 …

ありがとう。

23
Tavi

単一のバックスラッシュを処理する直接的な方法はないため、コメントセクションでDavid Arenburgが提供した問題に最も近い解決策を以下に示します。

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

キーボードからバックスラッシュを入力するときは、常にエスケープしてください。

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

あなたがする場合に注意してください

str <- "a\f\r"

strには、noバックスラッシュが含まれます。 a\f\f\r(同じ)を除き、通常は印刷できません)の3文字で構成されます。

そして、可能な質問に立ち向かうためだけです。データがファイルから読み取られた場合、ファイルに二重のバックスラッシュを含める必要はありません。たとえば、次を含むファイルtest.txtがある場合

a\b\c\d\e\f

あなたがやる

str <- readLines("test.txt")

strには、予想どおり文字列a\b\c\d\e\fが含まれます。5つの単一のバックスラッシュで区切られた6文字。ただし、使用する場合は、typeバックスラッシュを2つ重ねる必要があります。

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

dputからは、UTF-16でエンコードされたテキストがあるように見えますが、これはおそらくWindowsマシンから来たものです。による

Supplementary Multilingual Plane でグリフをエンコードしますが、これはかなりあいまいです。ファイルを読み込むときに、encoding="UTF-16"readLinesに渡す必要があると思います。

12
Hong Ooi

1つの非常に普遍的なソリューションは

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

上記のコメントに感謝します。

9
JelenaČuklina

これは役に立つかもしれません:)

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

これは受け入れられた答えと同じですが、rtemovesは少なくなります(非ASCII文字のみ):

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