R勉強メモ(基礎編)
ISITのRを用いたデータ分析基礎を受講したのでメモ
Rとは?
Rの概要
マルチプラットフォーム (Win/Lin/OSXで動作)
複雑なデータ型に対する処理が勘弁
統計関数が充実
Rの基礎
Rを用いたデータ分析の基礎
Rのオブジェクト
変数、データ、関数など 名前を付ける=付値
[オブジェクト名] <- [値] でオブジェクトに値を代入する。
> X <- 1
Rの作業ディレクトリ
以下で確認可能 作業ディレクトリ配下のデータファイルを読み込む
> getwd() [1] "/hogehoge"
作業ディレクトリを変更するとき
> setwd("/work")
helpと終了
> help(関数名) > q() > quit()
データタイプとデータ構造
型+構造でデータを表現
データタイプ
- logical 2値
- integer 整数
- double 実数
- complex 複素数
- character 文字列(演算はできない)
データタイプの確認方法
> typeof(obj)
Rはデータタイプを自動的に決定する。
数値は明示しない限りdouble型 タイプが混じった演算はより大きい型になる
データ構造
スカラ
単一のデータを持つ 定数、変数
ベクタ
同一データタイプを一次元で列挙したもの
要素アクセス ベクタ[要素番号] ベクタ[c(要素番号, 要素番号...)]
数値ベクタ
> 3:6 [1] 3 4 5 6
seq関数を使って、初項、末項、公差を指定してベクタを生成する。
> seq(4, 8, by=2) [1] 4 6 8
rep関数を使って、xをm回繰り返して並べたベクタを生成
> rep(6:7, times=2) [1] 6 7 6 7
c関数を使って、任意のベクタを生成
> c(1,2,1,1) v1 <- 1:5
ベクタ同士を連結
> c(v1, 6:10) 1 2 3 4 ... 10
scan関数を使って、ファイルからベクタを読み込み
scan("ファイル名", skip=s, nlines=n) skipは先頭s行をスキップすることを示している。 nlinesはn行のデータを読み込むことを示している。
rnorm(n, mean=m, sd=d)を使ってガウス分布に従った、乱数列を得る 項数n, 平均m, 標準偏差d
runif(n, max=mx, min=mn)を使って一様分布に従った、乱数列を得る 項数n, 最大値max, 最小値min
その他もあり
行列
列と行に要素を並べたデータ型
matrix(v1, nrow=n1, ncol=n2, byrow={TRUE|FALSE}) ベクタv1からn1行n2列の行列を生成 byrowで列優先か行優先かきまる。(元のベクタが列に準ずるか行に順ずるか)
n1n2がv1の要素数と一致 => v1の全要素が行列化 n1n2がv1の要素数より大きい => v1の要素を繰り返し n1n2がv1の要素数より小さい => v1の要素をn1n2までの要素で生成
元のベクタのもっとも表現力の高いデータタイプになる ncolを省略した場合は自動で決定。(割り切れない場合は上のルールでデータ埋められる) byrowはデフォルトTRUE
要素取り出し
mat[3] => 3行目1列のデータをスカラ値として返す mat[1,1] => 1行1列のデータをスカラ値として返す mat[1,] => 1行目のすべてをベクタとして返す mat[,1] => 1列目のすべてをベクタとして返す mat[c(1,3),] => 1,3行目を抜き出した新しい行列を返す
リスト
異なるタイプのオブジェクトを一次元に並べて管理するデータ型
list(n1=o1, n2=o2,...) キーn1にオブジェクトo1を格納 キーn2にオブジェクト02を格納 したリストを生成する。
例
> testList <- list(name="test", number=20) > testList $name [1] "test" $number [1] 20
str(<listオブジェクト>) でリストの構造を表示する
> str(testList) List of 2 $ name : chr "test" $ number: num 20
<リストオブジェクト>$<キーの名前> <リストオブジェクト>2 <リストオブジェクト>"<キーの名前>" で要素アクセスする
また、 <リストオブジェクト>[数値範囲] <リストオブジェクト>["<キーの名前>"] とすると リスト型で返却される
> testList$number [1] 20
データフレーム
リストの一種 表を表現したもの
1要素 (=行) は異なるタイプのオブジェクトの列となっている 1変量 (=列) はデータフレーム中ですべて同じ要素数となっている必要がある。
data.frame()によってデータフレームを生成する。
read.csv("<ファイル名>", header={TURE(default)|FALSE}, sep=","(default)) によって、CSVファイルを読出してデータフレームに付値する
ベクタの羅列からデータフレームを生成することも可能 ※各ベクタの要素数は同じである必要がある
str(<データフレームオブジェクト>)で構造を確認可能
> df<-data.frame() > df<-read.csv("example-readtable.csv") > df Name Japanese Math English Chemistry Geography 1 AAAA 55 70 80 45 60 2 BBBB 90 50 90 40 80 3 CCCC 60 65 65 60 60 4 DDDD 80 85 85 80 70 5 EEEE 95 40 100 70 50 > str(df) 'data.frame': 5 obs. of 6 variables: $ Name : Factor w/ 5 levels "AAAA","BBBB",..: 1 2 3 4 5 $ Japanese : int 55 90 60 80 95 $ Math : int 70 50 65 85 40 $ English : int 80 90 65 85 100 $ Chemistry: int 45 40 60 80 70 $ Geography: int 60 80 60 70 50
要素アクセス
一重の大かっこ <データフレームオブジェクト>[1] <データフレームオブジェクト>["<変量名>"]
=> ある一変量の全データがデータフレーム型で返却される
二重の大かっこ [] <データフレームオブジェクト>1 <データフレームオブジェクト>"<変量名>"
=> ある一変量の全データがベクタ型で返却される
> df[2] Japanese 1 55 2 90 3 60 4 80 5 95 > df[[2]] [1] 55 90 60 80 95
<データフレームオブジェクト>[<行番号>, <列番号|変量名>]
=> ある一要素、または部分データフレーム
※ある行すべてを抜き出す場合列番号は省略
> df[1,1] [1] AAAA Levels: AAAA BBBB CCCC DDDD EEEE > df[1,1:2] Name Japanese 1 AAAA 55
データフレームからのデータ抽出
subset(<データフレーム>, subset=抽出条件, select=抽出変量)関数で、条件に従ったデータを抜き出し
> subset(df, subset=Japanese>70) Name Japanese Math English Chemistry Geography 2 BBBB 90 50 90 40 80 4 DDDD 80 85 85 80 70 5 EEEE 95 40 100 70 50 > subset(df, subset=Japanese>70, select = c(Japanese,English)) Japanese English 2 90 90 4 80 85 5 95 100
データフレームの結合
merge(x, y) x,y データフレームの結合 共通の変量で同じ要素を持つものはマージされる
edit(df) df データフレーム エディタが表示され、データを編集できる ※返り値に編集されたデータフレームが返却される。
因子(Factor)
文字列などは因子型として管理される 文字列ベクタに現れる要素に水準値をつけ、その水準値でデータを表現する。
factor(v) vはベクタ
水準は辞書順に値が与えられる。
水準値を自分で与えることもできる。
factor(v, levels=lv, ordered={TRUE|FALSE}) lv 水準ベクタ ※lvに含まれていない、要素がvにあるとエラー
ordered 順序関係を規定するか?(TRUEの場合、水準ベクタの要素順に大小関係が規定されている) ※四則演算には意味がないのでエラー
演算
四則演算
スカラとベクタの四則演算
ベクタのすべての要素にスカラ値との四則演算結果となる
対応する要素同士の演算となる
論理値ベクタが返る
長い方に合わせて、短い方を繰り返す
ベクタの演算
行列の演算
四則演算 各要素の演算 行列演算も可能
データの性質
質的データ
四則演算ができないデータ
名義尺度
便宜的に、数値を割り振ったデータ
一致/不一致 比較、計数
順序尺度
順序に意味がる名義尺度
大小比較
量的データ
間隔尺度
順序が等間隔で定義される順序尺度
加減算が可能
比例尺度
原点が設定されている間隔尺度
剰余算が可能