7

私はCSVで外国からの著者名をたくさん持っていますが、Rはそれをうまく読みます。Mechanical Turkにアップロードするためにそれらをクリーンアップしようとしています(これは、1つの国際化されたキャラクターでさえ本当に好きではありません)。そうすることで、私は質問があります(後で投稿されます)が、私はdputそれらを賢明な方法でさえすることができません:

> dput(df[306,"primauthfirstname"])
"Gwena\xeblle M"
> test <- "Gwena\xeblle M"
<simpleError in nchar(val): invalid multibyte string 1>

つまり、dput正常に機能しますが、結果をに貼り付けると失敗します。dputコピー/貼り付けをRに戻すために必要な情報を出力しないのはなぜですか(おそらく、必要なのは、構造ステートメントにエンコーディング属性を追加することだけですか?)。どうすればそうすることができますか?

\xebRに関する限り、これは有効な文字であることに注意してください。

> gsub("\xeb","", turk.df[306,"primauthfirstname"] )
[1] "Gwenalle M"

ただし、文字を個別に評価することはできません。16進コード\ x ##か、何もありません。

> gsub("\\x","", turk.df[306,"primauthfirstname"] )
[1] "Gwena\xeblle M"
4

1 に答える 1

1

dput()のヘルプページには、「RオブジェクトのASCIIテキスト表現を書き込む」と書かれています。したがって、オブジェクトに非ASCII文字が含まれている場合、これらを表現することはできず、何らかの方法で変換する必要があります。

したがって、 ingiconv()の前にベクトルを変換するために使用することをお勧めします。dput1つのアプローチは次のとおりです。

> test <- "Gwena\xeblle M"
> out <- iconv(test, from="latin1", to="ASCII", sub="byte")
> out
[1] "Gwena<eb>lle M"
> gsub('<eb>', 'ë', out)
[1] "Gwenaëlle M"

ご覧のとおり、これは両方の方法で機能します。後で使用gsub()して、バイトを文字に逆変換できます(エンコードでサポートされている場合、たとえばutf-8)。

2番目のアプローチはより単純です(そして私はあなたのニーズに適していると思います)が、一方向で機能し、あなたのlibiconvはそれをサポートしないかもしれません:

> test <- "Gwena\xeblle M"
> iconv(test, from="latin1", to="ASCII//TRANSLIT")
[1] "Gwenaelle M"

お役に立てれば!

于 2013-01-15T07:56:57.607 に答える