R-Fiddleが少しわかってきたとき悩むこと:データタイプ違いによるエラーver.2

Rで扱うデータのタイプ

RあるいはR-Fiddleでデータを読み込めるようになって、簡単なグラフならggplot2できれいに描けるようになり、いろいろな分析を始めようとしたとき、遭遇するのがデータのタイプによるエラーです。

Excelで集計する場合でも、ぞれのセルが文字列であるか数値であるか関数であるかなどに注意しないとエラーがでますよね。

Rでは、Excel以上にデータのタイプに注意をはらう必要があります。データのタイプによって使える関数が異なるので、思わぬところでエラーが出てしまうのです。

簡単な例をあげて説明しましょう。

データは日本語と数学の4人の試験結果です。

データから次のグラフを作ります。

1.R-Fiddleでのデータの読み込み

R-Fiddleにlibraries(データを縦長にし、ggplot2を利用するために必要)とデータを読み込みます。

> library(ggplot2)
library(reshape2)
data0 <- read.table(header = T, text='
id japanese mathematics
11 50 60
22 70 40
33 40 80
44 90 30
')

コンソール(R-Fiddleの画面の下側)に、data0と書き、実行すると次のように読み込まれたデータが表示されます。

> data0
  id  japanese mathematics
1 11        50          60
2 22       70          40
3 33       40          80
4 44       90          30

1行目はタイトル行として読み込むように指示(header=T)しました。残りはすべて数字です。

2.データタイプの確認

Rでは、自動的に数字は数字のタイプとして読み込まれます。実際にどのように読み込まれているのかを、str()によって確かめることができます。

> str(data0)
'data.frame':	4 obs. of  3 variables:
 $ id         : int  11 22 33 44
 $ japanese   : int  50 70 40 90
 $ mathematics: int  60 40 80 30

上は次のことを意味しています。

data0のデータ型はデータフレーム(data.frame)で、データ件数(obs.)が4、つまり、行が4行あり、変数(variables)は3、つまり、列は3列である。

さらに、データを縦にみて、id、japanese、mathematicsの列のデータタイプは、すべて整数(int)であることがわかります。

3.ggplot2でグラフを描く

さて、ggplot2を用いてグラフを描く場合、データの形を横長から縦長にする必要があります。ggplot2は縦長のデータを対象としているからです。

縦長にしたデータを下に示しますが、なぜggplot2が横長ではなく縦長のデータを扱うのかについては説明しません。ここでは、ggplot2では、データを縦長の形にしなければならないとわかれば十分です。

横長のデータを縦長にして、それを表示します。

> data0.long <- melt(data0, id.vars="id", variable.name="subject", value.name="score")
datao.long
   id     subject score
1 11     japanese    50
2 22    japanese    70
3 33    japanese    40
4 44    japanese    90
5 11     mathematics    60
6 22    mathematics    40
7 33    mathematics    80
8 44    mathematics    30

科目名をsubjectとして、それぞれの得点をscoreとしてまとめています。これがggplot2でグラフを描く場合の縦長のデータの形です。

データの構造を確認します。

> str(data0.long)
'data.frame':	8 obs. of  3 variables:
 $ id     : int  11 22 33 44 11 22 33 44
 $ subject: Factor w/ 2 levels "japanese","mathematics": 1 1 1 1 2 2 2 2
 $ score  : int  50 70 40 90 60 40 80 30

上のように、idとscoreの列のタイプは整数(int)、アルファベットの列は因子(Factor)として読まれています。

ggplot2でグラフを描く場合、特定の列を指定すると、自動的にその項目ごとに色を変えることができますが、指定する列のタイプはFactorでなければならないというルールがあります。

ここでは、受験者のid番号ごとに色分けしたいのですが、id列のタイプは整数です。

そのため、idの列のタイプを整数(int)から因子(Factor)にas.factor()を用いて変換(convert)します。

下に、変換のスクリプトと変換されたデータの構造を示します。

> data0.long$id <- as.factor(data0.long$id) 
... str(data0.long)
'data.frame':	8 obs. of  3 variables:
 $ id     : Factor w/ 4 levels "11","22","33",..: 1 2 3 4 1 2 3 4
 $ subject: Factor w/ 2 levels "japanese","mathematics": 1 1 1 1 2 2 2 2
 $ score  : int  50 70 40 90 60 40 80 30

idの列のタイプがFactorになっていることを確認できます。

このデータをもとに図を描きます。

上述のスクリプトをR-Fiddleに書き込みました。右上のEditをクリックし、リンク先のページの右下のRun codeをクリックしてください。図が表示されます。

学んだスクリプト

str():データの構造を示す。

as.factor():因子に変換する。

参考

Rpubsでスクリプトを示しました。

http://rpubs.com/shibatau/287150

データタイプについて参考にした文書

Introduction to R and RStudio


柴田 啓文

紹介 柴田 啓文

経済学部教員です。このサイトの管理者の一人です。

コメントを残す

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