「統計ソフト 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
論文・データ解析の支援
個別に直接相談できるのが良いと、たくさんの方にご利用頂いています。