tidyverseを使う場合、ファイルの読み書きにはreadrパッケージの専用関数(read_tsv関数・read_csv関数)を使うのが便利です。これらの専用関数ではデータ・フレーム構造より使いやすいtibble型でデータを読み込みますが、ファイルの各列のデータ型を直接指定することもできます。更に、readrのパッケージでは、大きなファイルの読み込みを高速に処理できます。このような特長から、Rの標準的なファイル処理よりも使いやすくなっています。

ファイルの読み込み・ファイルの書き出し
readrパッケージには、タブ区切り(tsv)やカンマ区切り(csv)などの、よく使うファイル形式の読み書き用に専用関数が準備されています。tidyverseパッケージをロードすると使えるようになります。読み込んだデータは、データ・フレーム型が改良されたtibble型になります。
専用関数
- read_csv, read_tsv
- ファイル読み込む(カンマ区切り・タブ区切り)
- write_csv, write_tsv
- ファイル書き込み(カンマ区切り・タブ区切り)
ファイルの読み書き
tidyverseをロードすると、readrパッケージも自動的にロードされて、専用関数が使えるようになります。サンプルとして、「read_csv関数」を使ってカンマ区切りのファイル読み込みを行い、「write_tsv関数」を使ってタブ区切りでファイル出力を行いました。
1: $ head -n5 iris.csv 2: 5.1,3.5,1.4,0.2,setosa 3: 4.9,3.0,1.4,0.2,setosa 4: 4.7,3.2,1.3,0.2,setosa 5: 4.6,3.1,1.5,0.2,setosa 6: 5.0,3.6,1.4,0.2,setosa
1: > library(tidyverse)
2:
3: # csvファイル 読み込み
4: > iris_data <- read_csv("iris.csv",
5: col_names = c("Sepal.Length", "Sepal.Width",
6: "Petal.Length", "Petal.Width",
7: "Species"))
8: Parsed with column specification:
9: cols(
10: Sepal.Length = col_double(),
11: Sepal.Width = col_double(),
12: Petal.Length = col_double(),
13: Petal.Width = col_double(),
14: Species = col_character()
15: )
16:
17: > iris_data
18: # A tibble: 150 x 5
19: Sepal.Length Sepal.Width Petal.Length Petal.Width Species
20: <dbl> <dbl> <dbl> <dbl> <chr>
21: 1 5.1 3.5 1.4 0.2 setosa
22: 2 4.9 3 1.4 0.2 setosa
23: 3 4.7 3.2 1.3 0.2 setosa
24: 4 4.6 3.1 1.5 0.2 setosa
25: 5 5 3.6 1.4 0.2 setosa
26: 6 5.4 3.9 1.7 0.4 setosa
27: 7 4.6 3.4 1.4 0.3 setosa
28: 8 5 3.4 1.5 0.2 setosa
29: 9 4.4 2.9 1.4 0.2 setosa
30: 10 4.9 3.1 1.5 0.1 setosa
31: # … with 140 more rows
32:
33: # tsvファイル 書き込み
34: > write_tsv(iris_data, "iris.tsv")
1: $ head iris.tsv 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 5.1 3.5 1.4 0.2 setosa 4: 4.9 3 1.4 0.2 setosa 5: 4.7 3.2 1.3 0.2 setosa 6: 4.6 3.1 1.5 0.2 setosa 7: 5 3.6 1.4 0.2 setosa 8: 5.4 3.9 1.7 0.4 setosa 9: 4.6 3.4 1.4 0.3 setosa 10: 5 3.4 1.5 0.2 setosa 11: 4.4 2.9 1.4 0.2 setosa
tibbleデータ
ファイルから読み込んだデータは、tibbleデータになります。Rの標準的なデータ構造であるデータ・フレームに似ていますが、より使いやすくなるように再定義されたデータ構造です。単独列だけ残ってもデータ・フレーム様な挙動が維持されたり、過剰なデータ表示、ファクターへの自動変換の抑制などの特長があります。
1: > library(tidyverse)
2:
3: # csvファイル 読み込み
4: > iris_data <- read_csv("iris.csv",
5: col_names = c("Sepal.Length", "Sepal.Width",
6: "Petal.Length", "Petal.Width",
7: "Species"))
8:
9: > str(iris_data)
10: Classes ‘spec_tbl_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 150 obs. of 5 variables:
11: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
12: $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
13: $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
14: $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
15: $ Species : chr "setosa" "setosa" "setosa" "setosa" ...
16: - attr(*, "spec")=
17: .. cols(
18: .. Sepal.Length = col_double(),
19: .. Sepal.Width = col_double(),
20: .. Petal.Length = col_double(),
21: .. Petal.Width = col_double(),
22: .. Species = col_character()
23: .. )
24:
25: > iris_data
26: iris_data
27: # A tibble: 150 x 5
28: Sepal.Length Sepal.Width Petal.Length Petal.Width Species
29: <dbl> <dbl> <dbl> <dbl> <chr>
30: 1 5.1 3.5 1.4 0.2 setosa
31: 2 4.9 3 1.4 0.2 setosa
32: 3 4.7 3.2 1.3 0.2 setosa
33: 4 4.6 3.1 1.5 0.2 setosa
34: 5 5 3.6 1.4 0.2 setosa
35: 6 5.4 3.9 1.7 0.4 setosa
36: 7 4.6 3.4 1.4 0.3 setosa
37: 8 5 3.4 1.5 0.2 setosa
38: 9 4.4 2.9 1.4 0.2 setosa
39: 10 4.9 3.1 1.5 0.1 setosa
40: # … with 140 more rows
41:
42: > iris_data[,1]
43: # A tibble: 150 x 1
44: Sepal.Length
45: <dbl>
46: 1 5.1
47: 2 4.9
48: 3 4.7
49: 4 4.6
50: 5 5
51: 6 5.4
52: 7 4.6
53: 8 5
54: 9 4.4
55: 10 4.9
56: # … with 140 more rows
データの型を指定する
readrパッケージの専用関数でファイルを読み込む場合、各列の読み込みの型を関数のオプションとして指定できます。データ型の指定は、col_typesで指定します。簡単に指定できる省略記法もあります。必要な列だけ指定することができます。
型を指定する方法
ファイルを読み込むとき、各列の読み込みの型をcol_typesオプションで、データ型をリストで順番に指定します。
- 文字列
- col_charactor()
- 整数
- col_integer()
- 実数
- col_double()
- 列を読み込まない
- col_skip()
他にも、時間・日付・ファクターなどのデータ型を明示的に指定することができます。
1: $ cat test.tsv 2: name data1 data2 3: aaa 1 1.0 4: bbb 2 2.0 5: ccc 3 3.0
1: > test_data <- read_tsv("test.tsv", col_types = list(col_character(), col_integer(), col_double()))
2:
3: > test_data
4: # A tibble: 3 x 3
5: name data1 data2
6: <chr> <int> <dbl>
7: 1 aaa 1 1
8: 2 bbb 2 2
9: 3 ccc 3 3
省略して指定する方法
col_typesオプションでよく使う省略記法です。文字列で指定します。
- 文字列
- “c”
- 整数
- “i”
- 実数
- “d”
- 日付
- “D”
- 列を読み込まない
- “_”
上記と同じサンプルを読み込んだ場合、キャラクター・整数・実数の順に列を読み込む場合は、”cid”と指定します。
1: >test_data <- read_tsv("test.tsv", col_types = "cid")
2:
3: > test_data
4: # A tibble: 3 x 3
5: name data1 data2
6: <chr> <int> <dbl>
7: 1 aaa 1 1
8: 2 bbb 2 2
9: 3 ccc 3 3
必要な列だけ指定する方法
必要な列のみ指定したい場合は、col_typesオプションで列名指定します。
1: >test_data <- read_tsv("test.tsv", col_types = cols(data1 = col_integer()))
2:
3: > test_data
4: # A tibble: 3 x 3
5: name data1 data2
6: <chr> <int> <dbl>
7: 1 aaa 1 1
8: 2 bbb 2 2
9: 3 ccc 3 3
大きなファイルの読み込み
readrパッケージを使うと、数百万行ある大きなファイルも高速で読み込むことができます。Rの標準的なファイル読み込みに比べて、読み込みにかかる時間が半分ほどに短縮されました。Rの標準的な方法で読み込んだ場合(read.csv関数)、約7.2秒かかりました。
1: > system.time(
2: + read_csv("Forbes2000_big.csv") # 約200万行・ファイルサイズ168MB
3: + )
4: user system elapsed
5: 2.872 0.084 2.956
R ファイル読み書き 標準的な方法
Rの標準的なファイルの読み込みは、read.table関数を使う方法です。データ区切り文字をオプションで指定することで、様々なデータフォーマットのファイルを読み込むことができます。ヘッダーの有無や行の名前をどうするかなどのオプションを指定して使うことが多いです。列ごとのデータ型も指定可能です。書き込みは、区切り文字を指定して、write.csv関数を使います。よく使うフォーマットについては、read.csv関数やread.table関数(タブ区切り)などのラッパー関数が準備されています。
1: > iris_data <- read.table("iris.csv",
2: sep = ",",
3: colClasses = c("numeric",
4: "numeric",
5: "numeric",
6: "numeric",
7: "factor"))
8: > names(iris_data) <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")
9:
10: > head(iris_data)
11: Sepal.Length Sepal.Width Petal.Length Petal.Width Species
12: 1 5.1 3.5 1.4 0.2 setosa
13: 2 4.9 3.0 1.4 0.2 setosa
14: 3 4.7 3.2 1.3 0.2 setosa
15: 4 4.6 3.1 1.5 0.2 setosa
16: 5 5.0 3.6 1.4 0.2 setosa
17: 6 5.4 3.9 1.7 0.4 setosa
18:
19: > write.table(iris_data, "iris2.tsv", sep = "\t", quote=F, col.names=T, row.names=F)
1: $ head -n5 iris2.tsv 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 5.1 3.5 1.4 0.2 setosa 4: 4.9 3 1.4 0.2 setosa 5: 4.7 3.2 1.3 0.2 setosa 6: 4.6 3.1 1.5 0.2 setosa

まとめ
- tidyverseを使う場合、ファイルの読み書きでは、readrパッケージのread_tsv関数・read_csv関数を使うのが便利。
- readrパッケージのファイルの読み込み関数では、col_typesオプションを使って、列毎にデータ型を直接指定することができます。
- readrパッケージを使うと、大きなファイルの読み込みが高速に処理できます。
- Rの標準的なファイル操作ではオプションを指定する頻度が高く、readrパッケージの方がデフォルト動作で使いやすくなっています。
論文・データ解析の支援
個別に直接相談できるのが良いと、たくさんの方にご利用頂いています。


関連記事









![バイオインフォ 道場 [bioinfo-Dojo]](https://bioinfo-dojo.net/wp-content/uploads/2016/03/some_object_luca-bravo-alS7ewQ41M8-unsplash.jpg)
