「統計ソフト R」にデータを読み込むのは簡単です。タブ区切りのデータやエクセル・DBなどからデータを取り込むことができます。

Rにデータを読み込む
「統計ソフト R」にデータを読み込む場合は、read.table関数をよく使います。Excelファイルやデータベースから読み込む場合は、専用のパッケージを利用します。タブ区切りのテキストファイルやエクセル・DBなどから取り込まれたデータは、データフレームとして格納されます。データの取込みには、色々なオプションが準備されています。良く使うものに、列名を表すヘッダー行やコメントなどの調整を行うためのオプションheader・skipや、区切り文字の指定sepなどがあります。
主なオプション
| オプション | 機能 |
|---|---|
| sep | フィールドの区切り文字を指定します。 |
| header | ヘッダーの有/無。有の場合は、header=T |
| row.names | 行の名前を示す列番号、またはベクターを指定します。 |
| skip | 最初から何行読み飛ばすかを指定します。コメント行など。 |
| nrows | データを何行読み込むかを指定します。skip, コメント行はカウントされません。 |
テキストファイルからの読み込み
タブ区切りテキスト
読み込むファイルがタブ区切りテキストの場合、sep(区切り文字)に”\t”を指定します。この場合、read.delim関数を利用した方が便利です。read.delim関数は、read.table関数を使いやすくしたラッパーです。オプションにデフォルトで、header=T・sep="\t"が指定されているので、わざわざ指定する必要がありません。
$ cat my_data.txt -*- my_data_file -*- ID data1 data2 A1 10 20 A2 100 200 A3 1000 2000 #A4 0 0 ## コメント行 A5 10000 20000 A6 100000 200000 A7 1 2
read.table関数で読込み(先頭行とコメント行を読み飛ばし、5行分のデータ)
R > my_data <- read.table("my_data.txt",
sep="\t", header=T, skip=1, row.names=1, nrows=5)
R > my_data
data1 data2
A1 10 20
A2 100 200
A3 1000 2000
A5 10000 20000
A6 100000 200000
read.delim関数で読込み
R > my_data <- read.delim("my_data.txt", skip=1, row.names=1)
R > my_data
data1 data2
A1 10 20
A2 100 200
A3 1000 2000
A5 10000 20000
A6 100000 200000
A7 1 2
csvファイル
読み込むファイルがカンマ区切りテキスト(csv)の場合、sep(区切り文字)に”,”を指定します。この場合、read.csv関数を利用した方が便利です。read.csv関数は、read.table関数を使いやすくしたラッパーです。オプションにデフォルトで、header=T・sep=","が指定されているので、わざわざ指定する必要がありません。
$ cat my_data.csv -*- my_data_file -*- ID,data1,data2 A1,10,20 A2,100,200 A3,1000,2000 #A4,0,0 A5,10000,20000 A6,100000,200000 A7,1,2
read.table関数で読込み(sep=”,”指定)
R > my_data <- read.table("my_data.csv",
sep=",", header=T, skip=1, row.names=1)
R > my_data
data1 data2
A1 10 20
A2 100 200
A3 1000 2000
A5 10000 20000
A6 100000 200000
A7 1 2
read.csv関数で読込み
R > my_data <- read.csv("my_data.csv", skip=1, row.names=1)
R > my_data
data1 data2
A1 10 20
A2 100 200
A3 1000 2000
A5 10000 20000
A6 100000 200000
A7 1 2
テキストファイル以外からの読み込み
Excelから読み込む
読み込むファイルがExcelファイル(xlsx)の場合、xlsxパッケージのread.xlsx2関数を使います。ファイル名とシート番号(または名称)を指定すれば、エクセルのシートからデータを読み込むことができます。ヘッダーの有/無や、データの取込み位置(行・列)を指定することができます。Linux環境を使用しているので、実際は「LibreOffice Calc」でxlsxファイルを開いています。
xlsxパッケージを利用
R > require(xlxs)
R > my_data <- read.xlsx2("my_data.xlsx", 1) # 1番目のシート
R > my_data
ID data1 data2
1 A1 10 20
2 A2 100 200
3 A3 1000 2000
4 A5 10000 20000
5 A6 100000 200000
6 A7 1 2
Excelから読み込むための環境づくり
xlsxパッケージのインストールに準備が必要だったので、メモを残します。環境(R version 3.1.2)によって異なると思うので、必要なところだけを参考にしていただければ幸いです。Rのパッケージは、rJava・xlsxの2つをインストールしました。その際、必要なライブラリを2つlibpcre3-dev・libbz2-devをインストールしました。

$ sudo apt-get install libpcre3-dev
$ sudo apt-get install libbz2-dev
$ sudo R CMD javareconf
$ sudo R
R > install.packages('rJava')
R > install.packages('xlsx')
MySQL(データベース)から読み込む
読み込む対象がデータベースの場合、DBIパッケージを利用します。MySQLを使う場合、RMySQLパッケージを使います。データベースに接続して、データベース名・テーブル名を指定すれば、データベースからデータを読み込むことができます。dbGetQuery関数を使えば、SQLを指定してデータを取得することもできます。
mysql > use test_db; mysql > show tables; +----------------+ | Tables_in_test | +----------------+ | test_tbl | +----------------+ mysql> select * from test_tbl; +------+------+------+------+ | id | f1 | f2 | f3 | +------+------+------+------+ | 1 | P | A | A | | 2 | P | P | A | | 3 | P | P | P | +------+------+------+------+
RMySQLパッケージを利用
R > require(RMySQL)
R > md <- dbDriver("MySQL")
R > cnct <- dbConnect(md, dbname="test_db", user="root", password="xxxx")
R > my_data <- dbReadTable(cnct, "test_tbl", row.names=1)
R > my_data
f1 f2 f3
1 P A A
2 P P A
3 P P P
MySQLから読み込むための環境づくり
RMySQLパッケージのインストールに準備が必要だったので、メモを残します。環境(R version 3.1.2)によって異なると思うので、必要なところだけを参考にしていただければ幸いです。Rのパッケージは、RMySQLをインストールしました。その際、必要なライブラリlibmariadbclient-devをインストールしました。
$ sudo apt-get install libmariadbclient-dev
$ sudo R
R > install.packages("RMySQL")
データ読込みの注意点(factorへの自動変換)
データフレームにデータを読み込む場合に、勝手にファクターデータとして変換される場合があります。回避するには、colClassesオプションを指定すると良いです。read.table関数のオプションで、各列に対して、colClasses=c("character", "numeric", ...)などと指定します。rep関数も使えるので、列数が多い場合は工夫するのが良いと思います。Factor型を文字列の細かな調整が必要ない場合は、stringsAsFactorsオプションでFALSEを指定しても良いです。
$ cat my_data.auto.txt ID description count A1 this_sampleA1_is_one_of_my_collection. 1 A2 this_sampleA2_is_one_of_my_collection. 1 ... A9 this_sampleA9_is_one_of_my_collection. 1
factor型に自動変換してしまう
R > my_data <- read.delim("my_data.auto.txt")
R > str(my_data)
'data.frame': 9 obs. of 3 variables:
$ ID : Factor w/ 9 levels "A1","A2","A3",..: 1 2 3 4 5 6 7 8 9
$ data1: Factor w/ 9 levels "this_sampleA1_is_one_of_my_collection.",..
$ count: int 1 1 1 1 1 1 1 0 1
データの型を指定して読み込み
R > my_data <- read.delim("my_data.auto.txt",
colClasses=c("character", "character", "integer"))
R > str(my_data)
'data.frame': 9 obs. of 3 variables:
$ ID : chr "A1" "A2" "A3" "A4" ...
$ description: chr "this_sampleA1_is_one_of_my_collection." ...
$ count : int 1 1 1 1 1 1 1 0 1
stringsAsFactorsでfactor型変換を防止
R > my_data <- read.delim("my_data.auto.txt", stringsAsFactors=F)
R > str(my_data)
'data.frame': 9 obs. of 3 variables:
$ ID : chr "A1" "A2" "A3" "A4" ...
$ description: chr "this_sampleA1_is_one_of_my_collection." ...
$ count : int 1 1 1 1 1 1 1 0 1
論文・データ解析の支援
個別に直接相談できるのが良いと、たくさんの方にご利用頂いています。


関連記事1














関連記事2








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