R 使い方 データ 読込み テキスト,csv,エクセル,データベース スクリプトの書き方

スポンサーリンク

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

とにかく早く問題解決したい人はこちら>>直接、データ解析相談

Rにデータを読み込む

「統計ソフト R」にデータを読み込む場合は、read.table関数をよく使います。Excelファイルやデータベースから読み込む場合は、専用のパッケージを利用します。タブ区切りのテキストファイルやエクセル・DBなどから取り込まれたデータは、データフレームとして格納されます。データの取込みには、色々なオプションが準備されています。良く使うものに、列名を表すヘッダー行やコメントなどの調整を行うためのオプションheaderskipや、区切り文字の指定sepなどがあります。

主なオプション

オプション機能
sepフィールドの区切り文字を指定します。
headerヘッダーの有/無。有の場合は、header=T
row.names行の名前を示す列番号、またはベクターを指定します。
skip最初から何行読み飛ばすかを指定します。コメント行など。
nrowsデータを何行読み込むかを指定します。skip, コメント行はカウントされません。

テキストファイルからの読み込み

タブ区切りテキスト

読み込むファイルがタブ区切りテキストの場合、sep(区切り文字)に”\t”を指定します。この場合、read.delim関数を利用した方が便利です。read.delim関数は、read.table関数を使いやすくしたラッパーです。オプションにデフォルトで、header=Tsep="\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=Tsep=","が指定されているので、わざわざ指定する必要がありません。

$ 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のパッケージは、rJavaxlsxの2つをインストールしました。その際、必要なライブラリを2つlibpcre3-devlibbz2-devをインストールしました。

libre_office
$ 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

R 4.0 インストール ubuntu
Rのインストール手順について。最近よくつかう「tidyverse」も一緒にインストールします。とにかく早く問題解決したい人はこちら>>直接、データ解析相談R 4.0 インストール手順事前設定$ sudo apt update -qq$ su...
R 使い方 debug(デバッグ)方法 スクリプトの書き方
スクリプトが思ったように動かない、そんなときはバグ(プログラムの間違い)があると言われます。スクリプトを書く場合、そのような間違いを書かないように注意することは当然ですが、完全に防ぐのは難しいことです。スクリプトが思うように動かない場合は、...
R 使い方 文字列処理(文字列検索・文字列置換)
統計ソフトRは、統計処理やグラフの描画でよく用いられます。しかし、色々なことに活用していると、「文字列処理ができると便利だな」と思うことがあります。統計ソフトRには、文字列処理のための便利な関数が準備されているので、代表的な関数についてまと...
R 使い方 while 繰り返し スクリプトの書き方
Rで「条件を満たす間ずっと繰り返し」を行う場合は、whileを使います。とにかく早く問題解決したい人はこちら>>直接、データ解析相談while スクリプトの書き方while文は、条件式と一緒に書きます。条件を満たす間、一連の文やブロックをず...
R 使い方 for 繰り返し スクリプトの書き方
Rで単純な繰り返し制御を行う場合は、forを使います。とにかく早く問題解決したい人はこちら>>直接、データ解析相談for スクリプトの書き方forは繰り返し制御の基本的な構造です。集合には、ベクターやデータフレームなどを使うことができます。...
R switch 使い方 スクリプトの書き方
R の switch文は、「複数の条件」とそれに「対応した処理」をまとめて記述できるので、if文よりも簡潔にかけます。R の switchの条件は、文字列で書かれたラベルで判断します。R の switch文の「書き方」と使い方を、サンプルを...
R 使い方 if 条件分岐 スクリプトの書き方
R の if文は、フロー制御で最も単純な条件分岐です。条件に「一致したかどうか」という判断で、次に実行するコマンドを変更したりするときに使います。Rのif文の「書き方」、ANDやORを使った複数条件の指定の仕方などを、サンプルを交えてまとめ...
R 使い方 関数 スクリプトの書き方
Rの使い方として、プログラムの基本構成となる関数の作り方について。とにかく早く問題解決したい人はこちら>>直接、データ解析相談R 使い方 関数を利用したプログラムメッセージの表示や、メッセージの長さを取得する関数を作成します。関数は、「関数...
R 使い方 Hello World スクリプトの書き方
Rでプログラムを書きます。今回は、プログラムの基本「Hello World!」です。とにかく早く問題解決したい人はこちら>>直接、データ解析相談Hello World プログラムHello Worldプログラムは、プログラムの勉強を開始する...
R 使い方 行列(マトリックス) スクリプトの書き方
Rのマトリックスは、他のプログラミング言語と同様、数値や文字などの1種類のデータを2次元配列として保持するデータ構造です。基本的な構造を理解すれば、Rはもっと使いやすいツールになります。マトリックスの使い方について。とにかく早く問題解決した...
R 使い方 リスト スクリプトの書き方
Rのリストは、他のプログラミング言語と同様、各項目にたいして名前をつけたベクトルです。基本的な構造を理解すれば、Rはもっと使いやすいツールになります。リストの使い方について。とにかく早く問題解決したい人はこちら>>直接、データ解析相談関連記...
R 使い方 ベクトル スクリプトの書き方
Rのベクトルは、他のプログラミング言語と同様、数値や文字などの1種類のデータを順番に保持するデータ構造です。基本的な構造を理解すれば、Rはもっと使いやすいツールになります。Rのベクトルの使い方について。とにかく早く問題解決したい人はこちら>...
R 使い方 データフレーム・ファクター スクリプトの書き方
Rのデータフレーム・ファクターは、他のプログラミング言語のデータ構造とは異なる独特な構造。でも、とてもよく使う構造で、必ず使いこなせるようになりましょう。基本的な構造を理解すれば、Rはもっと使いやすいツールになります。Rのデータフレームとフ...
R 使い方 データ構造まとめ スクリプトの書き方
Rで使うデータ構造をまとめてみます。一気に眺めることで、それぞれの特徴を理解できるかもしれません。とにかく早く問題解決したい人はこちら>>直接、データ解析相談Rのデータ構造ベクトルベクトルは、最も基本的な構造をしています。数値や文字などの1...

関連記事2

R plotのPDFやPNGへの保存 - PDFなら複数の画像保存も可能
Rのplot (グラフ) は、PDFやPNGファイルとして保存することができます。操作は、通常のグラフの描画と同じです。違うところは、前もって保存先のデバイスをオープンし、描画終了後に明示的にクローズするだけです。PDFなら1つのファイルに...
R 使い方 組込みデータセット iris データフレーム・ベクトル・リスト
Rのデータ型について学びます。使うデータは、組込みデータセットの「iris」です。irisの構造を眺めたり要約統計量を求めることで、データフレーム・ベクトル型・リスト型について簡単に学びます。とにかく早く問題解決したい人はこちら>>直接、デ...
ratio 1.5倍は、logFCで何?
bioinfomatics では、ratio や logFC を変動の閾値としてよく使います。ratio 2倍・4倍なら、対数表現も1・2と簡単にわかりますが、1.5倍などを閾値とした場合は、対数で何になるか覚えておくのは大変です。これらは...
R 知っていると便利!パッケージ読込みとヘルプ
Rのインストール済みのパッケージについて調べます。スクリプトがちゃんと動かないとき、「何がインストールされているか?」また、「何がインストールされていないか?」がヒントになるときがあります。とにかく早く問題解決したい人はこちら>>直接、デー...
R 関数 maxの位置・minの位置を求める
Rで、最大値や最小値を求めるのは簡単ですが、「最大値・最小値の位置は?」という問題を考えてみたいと思います。とにかく早く問題解決したい人はこちら>>直接、データ解析相談最大値・最小値を求める最大値・最小値を求めるのは簡単です。最大値を求める...
R 使い方 集計に便利な関数 aggregate
データフレームを使って集計を行う場合に、使いやすい関数があります。aggregate関数です。データフレームの計算にはapply系の関数がよく使われますが、わかりづらいという方にはオススメの方法です。とにかく早く問題解決したい人はこちら>>...
R 使い方 データフレーム 累積和を求める
データフレームやmatrixで累積和を求める機会ありませんか?「前の行の値」に「現在の行の値」を繰り返し足していくことで求められますが、せっかく「R」を使っているのに、for文やインデックスを使って求めるのも残念な感じがします。そんなときは...
R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します。条件指定の主なパラメータは、「subset」と「select」です。「subset」では行を抽出するための条件式、「select」では列を抽...
タイトルとURLをコピーしました