.csv
ファイルにテキスト文字列を入力しました。これには、\U00B5
g/dLのようなUnicodeシンボルが含まれています。 .csv
ファイルとRデータフレームでの読み取り:
test=read.csv("test.csv")
\U00B5
は、マイクロ記号µを生成します。 Rはそれをそのままデータファイルに読み込みます(\U00B5
)。ただし、文字列を印刷すると、\\U00B5 g/dL
と表示されます。
また、手動でコードを入力しても問題ありません。
varname <- c("a", "b", "c")
labels <- c("A \U00B5 g/dL", "B \U00B5 g/dL", "C \U00B5 g/dL")
df <- data.frame(varname, labels)
test <- data.frame(varname, labels)
test
# varname labels
# 1 a A µ g/dL
# 2 b B µ g/dL
# 3 c C µ g/dL
この場合、エスケープ記号\
をどのように取り除き、シンボルを出力させることができますか。または、Rにシンボルを印刷する別の方法がある場合.
この助けてくれてありがとう!
さて、最初にRの特定の文字が標準ASCII文字の外にある場合はエスケープする必要があることを理解してください。通常、これは「\」文字を使用して行われます。これが、Rで文字列を記述するときにこの文字をエスケープする必要がある理由です。
a <- "\" # error
a <- "\\" # ok.
「\ U」は、Unicodeエスケープの特別なインジケータです。このエスケープを使用するときは、文字列自体にスラッシュやUがないことに注意してください。これは、特定のキャラクターへの単なるショートカットです。注意:
a <- "\U00B5"
cat(a)
# µ
grep("U",a)
# integer(0)
nchar(a)
# [1] 1
これは文字列とは非常に異なります
a <- "\\U00B5"
cat(a)
# \U00B5
grep("U",a)
# [1] 1
nchar(a)
# [1] 6
通常、テキストファイルをインポートするときは、ファイルで使用されているエンコードで非ASCII文字をエンコードします(UTF-8またはLatin-1が最も一般的です)。これらの文字を表す特別なバイトがあります。テキストファイルがUnicode文字のASCIIエスケープシーケンスを持つことは「通常」ではありません。これが、Rが「\ U00B5」をUnicode文字に変換しようとしない理由です。ユニコード文字が必要な場合は、直接使用するだけでした。
ASCII文字値を再インターペットする最も簡単な方法は、stringi
パッケージを使用することです。
library(stringi)
a <- "\\U00B5"
stri_unescape_unicode(gsub("\\U","\\u",a, fixed=TRUE))
(唯一の問題は、「\ U」をより一般的な「\ u」に変換する必要があったため、関数がエスケープを適切に認識したことです)。インポートしたデータに対してこれを行うことができます
test$label <- stri_unescape_unicode(gsub("\\U","\\u",test$label, fixed=TRUE))