RでCSVファイルの入出力のパターンを備忘録として。
Shift-JIS(CP932)で保存しないと文字化けでエクセルで正しく表示されない歯がゆさ。
RStudioの文字コードの設定はこちらの記事をご参照いただくとして、ファイルの入出力の話です。文字コードをRでCP932に変換するというより、ファイルの文字コードを指定して読み込みます。
出力
- 文字コード指定あり:util::write.csv1択。
x1 <- c("hello", 1, "world", 2, "漢字", 3) x2 <- as.data.frame(matrix(x1, nrow = 3, ncol = 2, byrow=TRUE)) colnames(x2) <- c("key", "value") file_path_cp932 <- paste(getwd(), "R", "test_cp932.csv", sep = "/") utils::write.csv(x2, file = file_path_cp932, fileEncoding = "CP932", row.names = FALSE)
- 文字コード指定なし:util::write.csvの他にもreadr::write_csvが使える。
file_path_utf8 <- paste(getwd(), "R", "test_utf8.csv", sep = "/") utils::write.csv(x2, file = file_path_utf8, row.names = FALSE) readr::write_csv(x2, path = file_path_utf8)
入力
- 文字コード指定あり:util::read.csvもreadr::read_csvも
csv <- utils::read.csv(file_path_cp932, fileEncoding = "CP932") csv <- utils::read.csv(file_path_utf8, fileEncoding = "UTF-8") csv <- readr::read_csv(file_path_cp932, locale = readr::locale(encoding = "CP932")) csv <- readr::read_csv(file_path_utf8, locale = readr::locale(encoding = "UTF-8"))
utils::read.csvの場合は
fileEncoding = “CP932”
と指定するところがポイントですね。
readr::read_csv(readrパッケージ)の場合
locale = readr::locale(encoding = “CP932”)
と少し長くなります。