0Pricing
R Academy · レッスン

複数形式へのデータ出力

write_csv()とwritexlを使い、データフレームをCSV、Excel、RDSへ出力します。

「複数形式へのデータ出力」はCoddyKit上の無料R Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。

Rからデータを書き出す

データの読み込みは処理の半分にすぎません。結果を保存することも必要です。Rは、汎用性の高いCSV、Rオブジェクトを正確に保持できるRDS、高性能な分析に適したParquetなど、複数の出力形式をサポートしています。対象者と用途に応じて形式を選択してください。

library(readr)

# Create a sample data frame to write
df <- data.frame(
  name = c('Alice','Bob','Carol'),
  score = c(85.5, 92.0, 78.3),
  grade = c('B','A','C'),
  passed = c(TRUE, TRUE, TRUE)
)

print(df)
cat('\nWe will save this in multiple formats!')

write_csv() — CSVとして保存

write_csv(df, 'file.csv')は、データフレームをカンマ区切りファイルとして保存します。write.csv()とは異なり、デフォルトでは行名を書き込みません。結果は常にUTF-8でエンコードされます。また、データフレームを非表示で返すため、パイプ内で使用できます。

library(readr)

df <- data.frame(
  name = c('Alice','Bob','Carol'),
  score = c(85, 92, 78)
)

# Write to /tmp for demonstration
write_csv(df, '/tmp/students.csv')

# Verify by reading back
read_csv('/tmp/students.csv', show_col_types=FALSE)

write_csv()のオプション

write_csv()はいくつかのオプションを受け取ります。na='NA'はNAの書き出し方法を制御し、append=TRUEは既存ファイルに追記します。col_names=FALSEはヘッダーを省略し、quoteはフィールドを引用符で囲む条件を制御します。

library(readr)

df <- data.frame(
  name = c('Alice','Bob'),
  city = c('New York','Los,Angeles'),  # Contains comma
  score = c(85, NA)
)

# na='' writes NA as empty string (common Excel convention)
write_csv(df, '/tmp/test_write.csv', na='')
cat(paste(read_lines('/tmp/test_write.csv'), collapse='\n'))

write_tsv() — タブ区切りで出力

write_tsv(df, 'file.tsv')は、データをタブ区切り形式で保存します。データにカンマが含まれる場合や、後続のシステムがTSVを想定している場合に適しています。オプションはwrite_csv()と同じです。

library(readr)

df <- data.frame(
  address = c('123 Main St, NYC','456 Oak Ave, LA'),
  score = c(85, 92)
)

# TSV avoids delimiter conflict with commas in addresses
write_tsv(df, '/tmp/addresses.tsv')
cat(paste(read_lines('/tmp/addresses.tsv'), collapse='\n'))

saveRDS() — 任意のRオブジェクトを保存

saveRDS(obj, 'file.rds')は、任意のRオブジェクトをR固有のバイナリ形式でディスクにシリアライズします。readRDS('file.rds')で正確に復元でき、列の型、因子、属性、さらにはモデルオブジェクトまで保持されます。人間が直接読める形式ではありませんが、Rセッション間で完全に移植できます。

library(readr)

df <- data.frame(
  name = c('Alice','Bob'),
  score = c(85.5, 92.0),
  grade = factor(c('B','A'), levels=c('A','B','C','D'))
)

# Save with full type preservation
saveRDS(df, '/tmp/students.rds')

# Restore exactly
df2 <- readRDS('/tmp/students.rds')
print(df2)
print(class(df2$grade))  # factor — preserved!

saveRDS()とsave()の違い

saveRDS(obj, 'file.rds')は、オブジェクト名を付けずに単一のオブジェクトを保存します。readRDS()では、任意の名前を付けて代入できます。save(obj1, obj2, 'file.RData')は複数の名前付きオブジェクトを保存し、load()は元の名前で復元します(既存の変数を上書きする可能性があります)。

# saveRDS: single object, flexible on load
model <- lm(mpg ~ wt, data=mtcars)
saveRDS(model, '/tmp/my_model.rds')
best_model <- readRDS('/tmp/my_model.rds')  # Any name!
cat('R-squared:', round(summary(best_model)$r.squared, 3), '\n')

# save: multiple named objects, fixed names on load
# save(model, mtcars, file='/tmp/workspace.RData')
# load('/tmp/workspace.RData')  # Restores 'model' and 'mtcars'

write_delim() — 区切り文字を指定

write_delim(df, file, delim='|')は、任意の区切り文字を使って書き出します。後続のシステムがパイプ区切りなどの標準以外の形式を想定している場合に使用してください。データ品質に関する保証はwrite_csv()と同じです。

library(readr)

df <- data.frame(
  id = 1:3,
  name = c('Alice','Bob','Carol'),
  value = c(100, 200, 150)
)

# Write pipe-delimited
write_delim(df, '/tmp/data.psv', delim='|')
cat(paste(read_lines('/tmp/data.psv'), collapse='\n'))

writexlでExcelに出力

writexlパッケージ(readxlの関連パッケージ)は、データフレームを.xlsx形式に書き出します。writexl::write_xlsx(df, 'file.xlsx')のように使用します。複数のシートを書き出す場合は、名前付きリストを渡します。JavaやExcelのインストールは必要ありません。

# writexl::write_xlsx() — example (library not always available)
# library(writexl)

df1 <- data.frame(name=c('Alice','Bob'), score=c(85,92))
df2 <- data.frame(region=c('East','West'), sales=c(100,200))

# Single sheet:
# write_xlsx(df1, '/tmp/students.xlsx')

# Multiple sheets (named list):
# write_xlsx(
#   list(students=df1, sales=df2),
#   '/tmp/report.xlsx'
# )

cat('writexl writes pure .xlsx without Java or Excel!')

arrowでParquetファイルを扱う

Apache Parquetは、大規模データセットに適した列指向ストレージ形式です。圧縮効率が高く、列指向のクエリではCSVよりもはるかに高速に読み込めます。arrowパッケージはwrite_parquet()とread_parquet()を提供します。

# arrow::write_parquet() concept
# library(arrow)

# Large CSV -> Parquet (10-100x smaller, 10-100x faster reads)
# df <- read_csv('big_file.csv')
# write_parquet(df, 'big_file.parquet')
# df_back <- read_parquet('big_file.parquet')

# Parquet benefits:
# - Columnar: only reads columns you need
# - Compressed: ~10x smaller than CSV
# - Typed: no type re-guessing on read
# - Partitioned: split by date/region for parallel reads

cat('Parquet is the modern standard for large-scale analytics in R!')

パイプラインでデータを書き出す

write_csv()とsaveRDS()はいずれも入力を非表示で返すため、処理の流れを中断せずにパイプ内で使用できます。再現性を確保するには、チェックポイントとしてwrite_csv()による書き出しをパイプラインの途中に挿入します。

library(readr)
library(dplyr)

# Write mid-pipeline as a checkpoint
final_result <- data.frame(
  region=c('East','West','North'),
  sales=c(100,200,80)
) %>%
  mutate(pct = round(100*sales/sum(sales),1)) %>%
  {. ->> checkpoint_df; .} %>%  # Save checkpoint
  filter(sales > 90)

write_csv(checkpoint_df, '/tmp/checkpoint.csv')
print(final_result)

形式の選択ガイド

適切な出力形式は目的によって異なります。

  • CSV/TSV:汎用性が高く、人間が読みやすいため、誰でも開けます
  • RDS:RからRへの利用に適し、すべての型と属性を正確に保持します
  • xlsx:ビジネスユーザーやExcel利用者向けです
  • Parquet:大規模データ、分析パイプライン、本番システム向けです
  • JSON:APIやネストされた階層データ向けです(jsonlite::toJSON())
library(readr)

df <- data.frame(
  id = 1:5,
  value = c(10.5, 20.3, 15.7, 30.1, 25.8)
)

# CSV — universal
write_csv(df, '/tmp/data.csv')

# TSV — when commas are in data
write_tsv(df, '/tmp/data.tsv')

# RDS — R-native, type-preserving
saveRDS(df, '/tmp/data.rds')

cat('Files created:\n')
cat('CSV size:', file.size('/tmp/data.csv'), 'bytes\n')
cat('RDS size:', file.size('/tmp/data.rds'), 'bytes\n')

クイックチェック

Rのデータを保存する際、write_csv()に対するsaveRDS()の主な利点は何ですか?

復習:データの書き出し

Rからデータを書き出す際の重要ポイント:

  • write_csv(df, 'file.csv') — カンマ区切り、行名なし、UTF-8
  • write_tsv(df, 'file.tsv') — タブ区切りで出力します
  • write_delim(df, file, delim='|') — 任意の区切り文字を使用します
  • saveRDS(obj, 'file.rds') — バイナリ形式のRフォーマットで、すべての型を保持します
  • readRDS('file.rds') — 任意の名前で復元します。load()は元の名前で復元します
  • writexl::write_xlsx() — Java不要でExcelに出力します
  • arrow::write_parquet() — 大規模な分析データセット向けの列指向形式です
library(readr)

df <- data.frame(
  name = c('Alice','Bob','Carol'),
  score = c(85.5, 92.0, 78.3),
  grade = factor(c('B','A','C'))
)

# CSV: universal but loses factor
write_csv(df, '/tmp/demo.csv')
df_csv <- read_csv('/tmp/demo.csv', show_col_types=FALSE)
cat('CSV grade type:', class(df_csv$grade), '\n')  # character

# RDS: preserves factor
saveRDS(df, '/tmp/demo.rds')
df_rds <- readRDS('/tmp/demo.rds')
cat('RDS grade type:', class(df_rds$grade))  # factor

よくある質問

「複数形式へのデータ出力」レッスンは無料ですか?

はい。「複数形式へのデータ出力」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「複数形式へのデータ出力」で何を学びますか?

write_csv()とwritexlを使い、データフレームをCSV、Excel、RDSへ出力します。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「複数形式へのデータ出力」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. read_csv()によるCSVファイルの読み込み
  2. TSVと固定幅ファイルの解析
  3. readxlによるExcelファイルの読み込み
  4. 複数形式へのデータ出力
← R Academyに戻る