ファイルからのデータ読み込みとアクセス【第2回】

[公開日]2016/07/22[更新日]2017/05/22 [カテゴリー]R言語入門 Written by  IMIN

初心者向けのR言語講座

【第1回】ベクトル・行列の作成と四則演算・要素の参照
【第2回】データ読み込みとデータの取り出し方 ←今ここ!!
【第2.5回】Rで解析する上で知っておきたい便利なコマンド集
【第3回】Rで線形モデルによる回帰分析
【第4回】Rでの自作関数の作り方・使い方
【第5回】グラフのプロットと画像保存の方法(回帰直線)【終】

今回は実データの扱いに入ります。RではテキストファイルやExcelファイル(多くの場合csv形式のファイル)を変数に読み込んで解析を行うことが多いです。この時、データはデータフレーム型という形式で読み込みが行われます。

今回は、「どのようにしてファイルの中身を変数データフレーム型で読み込んでR上で操作するのか」について解説していきます。

sample-data.csv←今回使う解析用のファイル(csv形式)です。皆さんも、是非ダウンロードしてR上で動かしてみましょう!こんな感じのデータになってます。

sample-data

 
 

データの読み込み方とデータのアクセス(参照)方法

データ読み込み方

Rでcsv形式のファイルをデータフレーム型で読み込む時に使う関数として”read.csv()”というものが用意されています。

データの読み込み自体は1行で済みます。

プログラム
df <- read.csv("sample-data.csv",header=T,row.names=1)

ここでのポイントは以下の3つ。

①読み込みたいデータのファイル名を""で囲む。

②headerは列名があるか無いかを指定。あるときはT(TURE)、ない時はF(FALSE)今回のデータは一行目に年齢や血圧などの列名が入っているデータを扱っているのでheader=Tで読み込みを行っています。デフォルトでheaderはTRUEであるので指定しなくても大丈夫ですが、ここでは一応指定してあります。

③row.namesは行名の指定。row.names=1だと1列目が列名になる。今回のデータは1列目は番号が書いてあるのでrow.names=1を指定して、1列目を行名として扱っています。

ここでdfの中身はこのようになっているはずです。

プログラム
> df
年齢 血圧 肺活量 性別 病気 体重
1 22 110 4300 M 1 79
2 23 128 4500 M 1 65
3 24 104 3900 F 0 53
4 25 112 3000 F 0 45
5 27 108 4800 M 0 80
6 28 126 3800 F 0 50
7 28 126 3800 F 1 43
8 29 104 4000 F 1 55
9 30 125 3600 F 1 47
10 31 120 3400 F 1 49
11 32 116 3600 M 1 64
12 32 124 3900 M 0 61
13 33 106 3100 F 0 48
14 33 134 2900 F 0 41
15 34 128 4100 M 1 70
16 36 128 3420 M 1 55
17 37 116 3800 M 1 70
18 37 132 4150 M 1 90
19 38 134 2700 F 0 39
20 39 116 4550 M 1 86
21 40 120 2900 F 1 50
22 42 130 3950 F 1 65
23 46 126 3100 M 0 58
24 49 140 3000 F 0 45
25 50 156 3400 M 1 60
26 53 124 3400 M 1 71
27 56 118 3470 M 1 62
28 58 144 2800 M 0 51
29 64 142 2500 F 1 40
30 65 144 2350 F 0 42

行列と似ていますね。行列との違いはデータフレームでは全ての行と列が必ず列名行名(ラベル)を持っているということです。そしてデータフレームでは、この列名行名による操作が可能になっています。

ここで使ったコマンド、関数を説明は重複しますが、一覧で載せておきます。

コマンド使い方
read.csvcsv形式のファイルを読み込む関数。"ファイル名が.csv"で終わっているものを読み込む。
header一行目を列名として読み込むか否か。header=TRUEで一行目は列名扱い。
row.namesデータ詠み込み時に行名を設定。row.names=aでa列名を行名として扱う。空白で行名なし。

データのアクセス(参照)方法

データフレームの特徴は、指定すれば任意の要素へアクセス出来ることです。例えば、データの1列目だけを見たり、1行目だけを見たり、列名が”年齢”の列だけを参照したり、、、という具合にです。ではどうすればできるのか実際にプログラムを見てみましょう。

プログラム
df[,1] #1列目のデータ
df[1,] #1行目のデータ
df$年齢 #「年齢」という名の列のデータ

このようなプログラムで指定した列や行にアクセスできます。結果は次のようになっているはずです。

プログラム
> df[,1] #1列目のデータ
[1] 22 23 24 25 27 28 28 29 30 31 32 32 33 33 34 36 37 37 38 39 40 42 46 49
[25] 50 53 56 58 64 65
> df[1,] #1行目のデータ
年齢 血圧 肺活量 性別 病気 体重
1 22 110 4300 M 1 79
> df$年齢 #「年齢」という名の列のデータ
[1] 22 23 24 25 27 28 28 29 30 31 32 32 33 33 34 36 37 37 38 39 40 42 46 49
[25] 50 53 56 58 64 65

$を使えば指定の列名のデータにもアクセスできます。「参照したい部分が何列目かは数えないと分からないけど、列名はすぐ分かる」というような時に非常に便利に使えるコマンドなのでぜひ覚えておいてください。データ参照で頻繁に使うコマンド例です。次の項でさらに詳しく触れていきます。

コマンド使い方
df$列名「列名」という名の列のデータを参照
df[,a]a列目のデータを参照。
df[b,]b行目のデータを参照。
df[,c(a,b)]a列目とb列目のデータを参照

データの取り出し方

Rでは、データの任意の部分を参照するだけでなく、ほかの変数に代入することによって保存することもできます。大きなデータから必要なデータだけを取り出して保存したい時などに使えます。

では早速6つの例を見てみましょう。データをどのように取り出せたのでしょうか。ここでは新登場のコマンド"subset"というものを使います。

例1:男性だけを取り出す

男性だけを取り出す場合、男性は性別の列が”M”であるので、以下のようなプログラムで取り出せます。三種類ありますが、どれも同じ意味です。

プログラム
M.dat <- subset(df,df$性別=="M")
M.dat <- subset(df,df[,4]=="M")
M.dat <- df[df$性=="M",]

例2:体重が60kg未満の人を取り出す。

体重が60kg未満の場合は体重の列を取り出し、それに対して<60で指定します。

プログラム
weight60 <- subset(df,df$体重<60)
weight60 <- df[df[,6]<60,]

例3:男性かつ体重が60kg未満の人を取り出す。

例1と例2の両方を満たしていないといけないので、二つの条件を書いてを&(かつ)で結びます。

プログラム
M.60 <- subset(df,df$性別=="M" & df$体重<60)
M.60 <- df[df[,4]=="M" & df[,6]<60,]

例4:肺活量4000以上の人を取り出す

肺活量の列を取り出し、それに対して>=4000で4000以上の指定を行います。

プログラム
h<-subset(df,df$肺活量>=4000)

例5:肺活量が3000以上、4000以下の人を取り出す。

肺活量の列に対して、3000以上と4000以下の指定を行い&(かつ)で結びます。

プログラム
h1<-subset(df,df$肺活量>=3000 & df$肺活量<=4000)

例6:病気の列が1であり、体重が7kg以上の人を取り出す。

病気の列に対して==1を指定し、体重の列に対して>=70を指定。二つを&(かつ)で結びます。

プログラム
b<-subset(df,df$病気==1 & df$体重>=70)

 

 

それぞれ、どのようなデータになったかは、ここに載せるとあまりに長くなるので載せませんが、よかったら自分で確認してみてくださいね。

今回使ったコマンドやテクニックを表で見ていきましょう。

コマンド使い方
subset(変数,条件)変数の条件に合うものを取り出す。subset(df,df$性別=="M")でdfという変数の性別の列が”M”であるものを取り出した。
変数[行の条件,列の条件]変数内の条件にあったものを取り出す。df[df$性=="M",]でdf内の行の条件で性別の列について”M”であるものだけを取り出す。列の条件は空白なので行の条件を満たす、全ての列を取り出している。
"=="一致。a==bでaがbと等しいときTRUE(真)になる。
<=,>=それぞれ以下、以上の意味。条件を満たすときTRUEを返す。
&かつの意味。(条件式A & 条件式B)で条件式Aと条件式Bを両方満たすとき、TRUE。ベクトルを扱う場合、c言語などと違い、&&(2つ)ではなく&(1つ)なので要注意。変数を扱う場合はC言語と同様に&&(2つ)を使用。

まとめと復習用コピペプログラム

いかがでしたでしょうか?今回はExcelデータをRで変数にデータフレーム型読み込んで、任意の部分を参照したりする方法を学びました。次回からいよいよ統計的手法を用いたデータ処理に入ります。解析に使いたい部分のデータだけを取り出したりするときに、今回学んだことを思い出して頂ければと思います。復習用に今回使ったプログラムを全て載せておきます。

プログラム
#データ読み込み
df <- read.csv("sample-data.csv",header=T,row.names=1)#①読み込みたいデータ名を""で囲む
#②headerは列名があるか無いか。あるときはT(TURE)、ない時はF(FALSE)
#③row.namesは行名の指定。row.names=1だと1列目が列名になる#データのアクセス
df[,1] #1列目のデータ
df[1,] #1行目のデータ
df$年齢 #「年齢」という名の列のデータ#データの取り出し方
#例1:男性だけを取り出す
M.dat <- subset(df,df$性別=="M")
M.dat <- subset(df,df[,4]=="M")
M.dat <- df[df$性=="M",]#例2:体重が60kg未満の人を取り出す
weight60 <- subset(df,df$体重<60)
weight60 <- df[df[,6]<60,]#例3:男性かつ体重が60kg未満の人を取り出す
M.60 <- subset(df,df$性別=="M" & df$体重<60)
M.60 <- df[df[,4]=="M" & df[,6]<60,]h<-subset(df,df$肺活量>=4000)
h
h1<-subset(df,df$肺活量>=3000 & df$肺活量<=4000)
h1
b<-subset(df,df$病気==1 & df$体重>=70)
b
 
 
初心者向けのR言語講座

【第1回】ベクトル・行列の作成と四則演算・要素の参照
【第2回】データ読み込みとデータの取り出し方 ←今ここ!!
【第2.5回】Rで解析する上で知っておきたい便利なコマンド集
【第3回】Rで線形モデルによる回帰分析
【第4回】Rでの自作関数の作り方・使い方
【第5回】グラフのプロットと画像保存の方法(回帰直線)【終】

  • スポンサーリンク

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA