0Pricing
R Academy · レッスン

TSVと固定幅ファイルの解析

read_tsv()とread_fwf()を使って、タブ区切りデータと固定幅データを扱います。

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

CSV以外の形式:その他のファイル形式

すべての表形式データがCSVで提供されるわけではありません。タブ区切りファイル(TSV)、パイプ区切りファイル、固定長形式(FWF)ファイルは、政府データ、レガシーシステム、科学データベースでよく使われます。readrパッケージでは、これらすべてを一貫した構文で扱えます。

library(readr)

# readr's flat file readers:
# read_csv()    - comma-separated
# read_csv2()   - semicolon-separated (European)
# read_tsv()    - tab-separated
# read_delim()  - any delimiter
# read_fwf()    - fixed-width format
# read_lines()  - raw text, one line per element

cat('All readr functions return tibbles with the same interface!')

read_tsv() — タブ区切り値

read_tsv()はタブ区切りファイルを読み込みます。read_csv()と同じ引数(col_types、na、skipなど)を使用できます。データにカンマ(住所や説明など)が含まれる場合は、CSVよりTSVが適しています。

library(readr)

# Simulated TSV using \t as delimiter
tsv_data <- 'name\tscore\tcity
Alice Smith\t85\tNew York, NY
Bob Jones\t92\tLos Angeles, CA
Carol White\t78\tChicago, IL'

# Note: cities contain commas — TSV handles this cleanly
df <- read_tsv(tsv_data, show_col_types=FALSE)
print(df)

read_delim() — 任意の区切り文字

read_delim(file, delim='|')は、任意の1文字の区切り文字を処理します。パイプ区切りファイル(|)は、パイプ文字がデータ自体に含まれることがほとんどないため、データウェアハウスや政府のエクスポートデータでよく使われます。

library(readr)

# Pipe-delimited data
pipe_data <- 'ID|Name|Department|Salary
1|Alice Smith|Engineering|95000
2|Bob Jones|Marketing|72000
3|Carol White|HR|65000'

df <- read_delim(pipe_data, delim='|', show_col_types=FALSE)
print(df)

read_delim() でセミコロン区切りファイルを扱う

ヨーロッパのCSVファイルでは、区切り文字にセミコロン、小数点記号にカンマを使うことがよくあります。read_csv2()はread_delim(delim=';', locale=locale(decimal_mark=','))のショートカットです。または、read_delim()を直接設定することもできます。

library(readr)

# European-style: semicolon delimiter, comma decimal
european_data <- 'name;price;quantity
Widget;9,99;100
Gadget;24,50;50
Sprocket;4,75;200'

# Method 1: read_csv2() shortcut
df1 <- read_csv2(european_data, show_col_types=FALSE)
print(df1)

# Method 2: explicit read_delim
# read_delim(data, delim=';', locale=locale(decimal_mark=','))

read_fwf() — 固定長形式

固定長ファイルには区切り文字がなく、列は文字位置によって識別されます。レガシーなメインフレームのエクスポートデータや政府データでよく使われます。fwf_widths()で列幅を指定するか、fwf_cols()で開始位置と終了位置を指定します。

library(readr)

# Fixed-width data (positions matter!)
fwf_data <- 'Alice    085NYC      
Bob      092LA       
Carol    078Chicago  '

# Column widths: name=9, score=3, city=10
df <- read_fwf(
  fwf_data,
  col_positions = fwf_widths(
    widths = c(9, 3, 10),
    col_names = c('name','score','city')
  ),
  show_col_types = FALSE
)

print(df)

開始位置と終了位置を指定する fwf_positions()

fwf_positions(start, end, col_names)は、文字の正確な開始位置と終了位置を指定します(1始まり)。列幅が一定でない場合や、指定しないことで一部の列をスキップしたい場合に適しています。

library(readr)

# Another fixed-width example using start/end positions
fwf_data <- '001ALICE   02024-01-15
002BOB     01   2024-02-20
003CAROL   03   2024-03-10'

df <- read_fwf(
  fwf_data,
  col_positions = fwf_positions(
    start = c(1, 4, 11, 14),
    end   = c(3, 10, 12, 23),
    col_names = c('id','name','score','date')
  ),
  show_col_types = FALSE
)

print(df)

fwf_empty() — 幅を自動検出する

fwf_empty(file, col_names)は、空白の間隔に基づいて列の境界を自動検出します。列名は別途指定します。間隔が一貫した、きれいに整形されたFWFファイルで最もよく機能します。

library(readr)

# Well-spaced fixed-width data
fwf_data <- 'name     score  grade
Alice    85     B
Bob      92     A
Carol    78     C
Dave     88     B'

# Auto-detect column positions from whitespace
df <- read_fwf(
  fwf_data,
  col_positions = fwf_empty(fwf_data, col_names=c('name','score','grade')),
  show_col_types = FALSE
)

print(df)

read_lines() — 生テキストの解析

read_lines(file)はテキストファイルを1行ずつ読み込み、文字ベクトルを返します。これは最も低レベルな読み込み関数です。解析前に行を前処理する必要がある場合(コメントの除外や不規則な形式への対応など)に使用します。

library(readr)

# Read lines and filter manually
raw_text <- '# Comment line
# Another comment
name,score
Alice,85
Bob,92'

lines <- read_lines(raw_text)
print(lines)

# Filter out comment lines
clean_lines <- lines[!startsWith(lines, '#')]
df <- read_csv(paste(clean_lines, collapse='\n'), show_col_types=FALSE)
print(df)

段階的な確認のための read_lines()

read_lines(file, n_max=10)を使うと、完全な読み込みを行う前に、任意のテキストファイルの最初の数行だけをプレビューできます。エンコーディングの問題を診断したり、実際のヘッダー行を見つけたり、区切り文字の種類を特定したりするのに便利です。

library(readr)

# Preview first few lines before reading
sample_file <- 'METADATA: version 1.2
DATE: 2024-01-15
---
id,name,value
1,Alice,100
2,Bob,200'

# Inspect to find where the data starts
preview <- read_lines(sample_file, n_max=4)
print(preview)
# From this we know: skip=3, then read as CSV

エンコーディングの問題への対応

非ASCII文字(アクセント記号付き文字やラテン文字以外の文字)を扱うには、正しいエンコーディングを指定する必要があります。read_csv()またはread_delim()の中でlocale(encoding='latin1')やlocale(encoding='UTF-8')を使用します。デフォルトはUTF-8です。

library(readr)

# Detect encoding of a file
# readr::guess_encoding('file.csv')  # Returns likely encodings

# Specify encoding explicitly
# df <- read_csv('data_latin1.csv',
#   locale = locale(encoding = 'latin1'))

# For UTF-8 with BOM (common in Windows exports):
# df <- read_csv('data_utf8bom.csv',
#   locale = locale(encoding = 'UTF-8-BOM'))

cat('Encoding matters for accented chars: \xc3\xa9 (UTF-8 for e-acute)\n')
print(guess_encoding(chartr('\xe9','e','caf\xe9')))

適切な読み込み関数を選ぶ

適切なreadr関数を選ぶための簡単なガイド:

  • カンマ → read_csv()
  • セミコロン+ヨーロッパ形式の小数 → read_csv2()
  • タブ → read_tsv()
  • その他の区切り文字 → read_delim(delim='|')
  • 固定位置 → read_fwf()
  • 生データの確認 → read_lines()
library(readr)

# Quick comparison of delimiters
csv_data  <- 'a,b,c\n1,2,3'
tsv_data  <- 'a\tb\tc\n1\t2\t3'
pipe_data <- 'a|b|c\n1|2|3'

read_csv(csv_data, show_col_types=FALSE)
read_tsv(tsv_data, show_col_types=FALSE)
read_delim(pipe_data, delim='|', show_col_types=FALSE)

確認問題

列が固定された文字位置(区切り文字なし)で定義されているファイルを読み込む場合、どのreadr関数が最適ですか?

まとめ:TSVと固定長ファイル

CSV以外のフラットファイル形式の要点:

  • read_tsv() — タブ区切り。データにカンマが含まれる場合に最適です
  • read_delim(delim='|') — 任意の1文字の区切り文字に対応します
  • read_csv2() — セミコロン区切りで、ヨーロッパ形式の小数点記号に対応します
  • read_fwf(fwf_widths(c(10,5,8))) — 列幅で固定長を指定します
  • read_fwf(fwf_positions(start, end)) — 正確な位置で固定長を指定します
  • read_lines(file, n_max=10) — 解析前に生の行を確認します
  • すべての関数で、col_types、na、skip、locale()引数を共通して使用できます
library(readr)

# Pipe-delimited with custom NA values
df <- read_delim(
  'ID|Name|Score|City
  1|Alice|85|NYC
  2|Bob|N/A|N/A
  3|Carol|78|Chicago',
  delim = '|',
  na = c('', 'NA', 'N/A'),
  show_col_types = FALSE
)

print(df)
print(colSums(is.na(df)))

よくある質問

「TSVと固定幅ファイルの解析」レッスンは無料ですか?

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

「TSVと固定幅ファイルの解析」で何を学びますか?

read_tsv()とread_fwf()を使って、タブ区切りデータと固定幅データを扱います。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「TSVと固定幅ファイルの解析」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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