Hadleyさん作のCSVとかTSVとかを読むためのパッケージ。バージョンを見ると分かるように(羽鳥教のひとは.9000
というバージョンを「次バージョンの開発中版」という意味で使うみたいです)、まだリリース前の状態です。
どんなパッケージなのか
なんかざっくり言うと、
base
のread.csv()
とかより分かりやすい&速い- とはいえきれいさ重視なので
fread
よりは遅い。神もそう言っておられます。
という感じらしいです。スピード狂はfread()
を使った方がよさげです。
使ってみる
何はともあれ使ってみます。一番使いそうなCSVを読み込む関数はread_csv()
です。
ヘルプにはこんな例が載っています。
# Read from a path read_csv(system.file("extdata/mtcars.csv", package = "readr")) # Or directly from a string (must contain a newline) read_csv("x,y\n1,2\n3,4")
第一引数に何を指定するのか謎です。
ヘルプをもう少し読むと、指定できるものが以下のように書かれています。
Either a path to a file, a url, a connection, or literal data (either a single string or a raw vector). Connections and urls are saved to a temporary file before being read. Literal data is most useful for examples and tests. It must contain at least one new line to be recognised as data (instead of a path).
- ファイルパス
- URL
- コネクション
- 文字列(CSVのデータそのもの)
が指定できます。改行を含むと文字列と解釈されるようです。改行は例にあるように\n
と書いてもいいし、
read_csv("x,y 1,2 3,4")
という感じで複数行で書くこともできます。
base(read.csv()
とか)との違い
このへん:https://github.com/hadley/readr#output
- 文字列を勝手に
factor
にしない(stringsAsFactors = FALSE
が必要ない) - 列名を勝手に変換しない(
sum(x)
がsum..x..
に変わる、みたいなのが起こらない) - クラスは
c("tbl_df", "tbl", "data.frame")
になる(いちいちas_data_frame
とかする必要がない) - rownamesは設定されない
などなど
という感じらしいです。
列の型を指定する
col_types
という引数にリストを渡すことで明示的に型を指定できます。うまくその型に変換できなかった値はNA
として扱われます。明示的に指定しなかった列はいい感じに変換してくれるらしいです。
たぶん、こういうfactor
で読み込みたいときとか、
read_csv("iris.csv", col_types = list( Species = col_factor(c("setosa", "versicolor", "virginica")) ))
時刻を読み込みたいときとかに便利そう。
read_csv("x,y\n10時24分23秒,1\n20時9分59秒,2", col_types = list(x = col_datetime("%H時%M分%S秒"))) #> x y #> 1 1899-12-31 10:24:23 1 #> 2 1899-12-31 20:09:59 2
col_skip()
というのを使うとその列をスキップできます。
read_csv('x,O,z 1,3,9 9,11,0', col_types = list(O = col_skip())) #> x z #> 1 1 9 #> 2 9 0
文字列と数値だけのときは、c = character, d = double, i = integer, l = logical and _ = skips
のアルファベット一文字ずつを並べて列の型を指定できます。
read_csv('char,dbl,int,logi,skip a,1.1,1,T,1', col_types = "cdil_") #> char dbl int logi #> 1 a 1.1 1 TRUE
まあ便利そうなので、様子を見つつ使っていきたいと思います。