いまどきの固定長データはread_fwf()を用いて読み込む
こんな感じのデータがあったとする。
library(readr) fwf_sample <- readr_example("fwf-sample.txt") cat(read_lines(fwf_sample)) John Smith WA 418-Y11-4111 Mary Hartford CA 319-Z19-4341 Evan Nolan IL 219-532-c301
いわゆる固定長データであり、バイト数を指定して読み込むことになる。 Rだともともとread.fwf()という関数が用意されている。 https://dichika.hateblo.jp/entry/20120406/1333683931
が、いちいちバイト数を指定するのは面倒である。とにかく楽をしたい。データの読み込みなんぞで力を使いたくない。 空白のカラムからよしなにバイト数を推定して読み込んで欲しい。 こういう時はreadrパッケージのread_fwf()を利用する。
# 空白のカラムからよしなにバイト数を指定してもらうパターン read_fwf(fwf_sample, fwf_empty(fwf_sample, col_names = c("first", "last", "state", "ssn")))
もちろんバイト数を指定するパターンも利用できるし、色々な指定法がある。
# バイト数を指定するパターン read_fwf(fwf_sample, fwf_widths(c(20, 10, 12), c("name", "state", "ssn"))) # 上記を各列名と紐づけて指定するパターン read_fwf(fwf_sample, fwf_cols(name = 20, state = 10, ssn = 12)) # 開始位置と終了位置を指定するパターン # この場合、nameの開始位置は1 終了位置は20、ssnの開始位置は30 終了位置は42 read_fwf(fwf_sample, fwf_positions(c(1, 30), c(20, 42), c("name", "ssn"))) # 上記を各列名と紐づけて指定するパターン read_fwf(fwf_sample, fwf_cols(name = c(1, 20), ssn = c(30, 42)))
いかがでしたか?