🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

1回答

1371閲覧

Rで波ダッシュと全角チルダを扱う方法

luluca

総合スコア23

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2019/12/27 07:45

編集2019/12/27 08:38

こんにちは。

以下の点で困っています。
入力のExcelファイルに「~(波ダッシュ)」と「〜(全角チルダ)」が混在しているデータを扱っています。

これらを以下のように置換したいのですが、

r

1str_replace_all("1000〜1500", "(~|〜)", "@")

全角チルダがなぜか置換できません。

以下、試しました。

  • R studioのコンソールからは可能ですが、scriptとして実行すると置換できません。
  • R studioの文字環境として「UTF-8」と「Shift-JIS」の両方で試しました。
  • Excelを読み込むライブラリとしてopenxlsx, readxlで試しましたが、ダメでした。

Excelからではなく、以下のように直接変換するコードを書くとスクリプトからの実行でも変換できました。

R

1str_replace_all("11〜12", "〜", "@")

Excelを読み込む際に、意図せぬことが起きているのではと思ったのですが、解決策が分かりません。

調べるとこの問題って結構議論されているのですが、現状に適した解決策は分かりませんでした。

お手数をおかけしますが、よろしくお願いします。

以下、環境情報を追記しました。

R

1sessionInfo() 2R version 3.6.2 (2019-12-12) 3Platform: x86_64-w64-mingw32/x64 (64-bit) 4Running under: Windows >= 8 x64 (build 9200) 5 6Matrix products: default 7 8Random number generation: 9RNG: Mersenne-Twister 10Normal: Inversion 11Sample: Rounding 12 13locale: 14[1] LC_COLLATE=Japanese_Japan.932 LC_CTYPE=Japanese_Japan.932 LC_MONETARY=Japanese_Japan.932 15[4] LC_NUMERIC=C LC_TIME=Japanese_Japan.932 16 17attached base packages: 18[1] stats graphics grDevices utils datasets methods base 19 20other attached packages: 21[1] openxlsx_4.1.4 gtools_3.8.1 rjson_0.2.20 data.table_1.12.8 dplyr_0.8.3 stringi_1.4.3 22[7] stringr_1.4.0 readxl_1.3.1 hash_2.2.6.1 23 24loaded via a namespace (and not attached): 25[1] Rcpp_1.0.3 rstudioapi_0.10 magrittr_1.5 tidyselect_0.2.5 R6_2.4.1 rlang_0.4.2 26[7] fansi_0.4.0 tools_3.6.2 utf8_1.1.4 cli_2.0.0 yaml_2.2.0 assertthat_0.2.1 27[13] tibble_2.1.3 crayon_1.3.4 zip_2.0.4 purrr_0.3.3 vctrs_0.2.1 zeallot_0.1.0 28[19] glue_1.3.1 pbdZMQ_0.3-3 compiler_3.6.2 pillar_1.4.2 cellranger_1.1.0 backports_1.1.5 29[25] pkgconfig_2.0.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2019/12/27 08:19

やってみましたが、問題を再現できません。 sessionInfo()の実行結果を質問に追加してもらえませんか。
luluca

2019/12/27 08:38 編集

ありがとうございます。 ちなみに以下のコードではそれぞれ別の文字コードが表示されるでしょうか。私の環境ではいずれもcharToRawの結果が「81 60」となります。(コンソールから実行すると異なる結果となります。) print(charToRaw("〜")) print(charToRaw("~"))
guest

回答1

0

ベストアンサー

データがシフトJISベースで処理されようとしていることで問題が複雑化しているように見えます。
いわゆる全角文字が混ざるデータを処理するには、やはり入出力ともUTF-8に統一しておくのが良いと思います。

参考:
ExcelファイルをUTF-8のCSV形式で保存する方法(Excel 2016最新機能)

Excel 2010 を使用して CSV ファイルを簡単に UTF-8 にエンコードする方法はどのようなものですか?
Excel2013,2016でUTF8形式のCSVを編集する。

投稿2019/12/28 10:33

KojiDoi

総合スコア13692

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問