Rの基礎、ベクトルとデータ型
ベクトル
- Rで使われるベクトルは「複数の値をひとまとめに並べたもの」を意味する。
- 値には「並べた順番」がつけられ [ ] で示される。番地みたいなもの。これを使って値を呼び出せる。
- 数値、文字、論理値など色々なデータ型の値をいれることができる。ただし、種類の異なる値を混ぜて入れることは出来ない。
- たとえば、文字と数字を混ぜて入力すると、数字も文字として扱われ、文字型のベクトルになる。文字型として代入された数字は、計算することが出来ない。
- 関数 c()
- 入力された値をひとまとめに並べて、ベクトルを作る。値はベクトル内で順番(例 [1])を与えられる。
変数へのベクトルの代入と、その結果の違いを見る
#変数xに値5を代入する。 #値がひとつの時はc()を使わなくても代入できる。 x <- 5 x <- c(5) x #変数名をコンソールに入力すると、中身が表示される。 #変数xに値5と10のベクトルを作って代入する x <- c(5,10) x x[1] #xの一番目の値を呼び出す。 x[2] #xの二番目の値を呼び出す。 #変数xに文字「Con」を代入する x <- "Con" x <- c("Con") #変数xに文字ConとTestのベクトルを作って代入する x <- c("Con","Test")
規則的なベクトルを作る方法いろいろ
x : y | :コロン。xからyまでの整数ベクトルを作る。(公差1の等差数列をつくる) |
LETTERS[x:y] | 変数LETTERSは大文字アルファベットのベクトル。[x:y]でx番目からy番目の文字を抜き出す。 |
rep(x, y) | xをy回くりかえしたベクトルを作る。xにはベクトルも指定できる。 |
seq(x, y, z) | xからyまでをz間隔で区切ったベクトルを作る。等間隔の値が欲しい時に。 |
- seq(x, y, 1) = x:y
1 : 10 # 1 2 3 4 5 6 7 8 9 10 LETTERS[1:10] # "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" rep(0,10) # 0 0 0 0 0 0 0 0 0 0 seq(0,1000,250) # 0 250 500 750 1000
データ型
- Rはベクトルの中身にいれられた値に「データ型」という分類をつけ、それにしたがって処理を変化させる。そのためデータ型が間違っていると、関数plot()や統計解析から得られる結果が変わってしまう。入力したデータがどんな型として扱われるかは、つねに注意が必要。
- 調べる関数例 str(), class(), mode() 下記参照
数値 numeric
- 一般的な「数」の分類。計算できる値として扱われる。他に数を扱う方として、整数型 integralと複素数型 complex がある。
文字 character
- ""で囲まれて示される。間に半角スペースを入れられる。
- "1"は文字であり、計算できない。
日付型 Date
- 年月日を示す値。"2016-04-20"のように""で囲んで表示されるが、文字ではなく、日数の足し引きなどの計算ができる。
論理値 logical
- TRUE or FALSE の二つの値だけをもつ。T、Fと略して入力することもできる。判定式の答えなど、Yes/Noの答えに使われる。
- 例
x<-5 # xに5を代入 x>2 # xは2以上か?と聞く。 # TRUE の答えが返ってくる。 y <- x>2 # 変数yに「xは2以上か?」を代入する。 y # 式ではなく値だけが入っていることに注意。
factor型
- Rならではの型。含まれる要因の番号とその内容(水準、Levels)で構成される。
- 関数factor()
- 入力されたベクトルをfactor型にする。値の種類に番号を付け、その中身と対応付ける(例:1番はオレンジ、2番はりんごを意味する、とする)。そのため、データの中身は数になり、数に応じた要因(Levels)が別に保持される。
- 大きいデータを効率よく保存するために使われる(?)。
- 水準に大小・優劣などの相対的な順番をつける 関数ordered() もある。
- 多くの解析関数、作図関数はcharactor型をfactor型にして読み込んで処理するが、データの入力時に混同すると思わぬ結果がでることもある。
例 character型 と factor型の違い
x <- c("orange", "apple", "orange") x # 値だけが表示される。 y <- factor(x) #xをfactor型にしてyに代入 y # 値とLevels(水準名) str(y) # 変数yの構造をみる # Factor w/ 2 levels "apple","orange": 2 1 2 # Levels(水準)は "apple", "orange" の二つ。 # データの中身は 2 1 2 つまり「水準2、水準1、水準2」の順に並んでいる。 class(x) # データ型を調べる class(y) # xは文字型と表示され、yはfactor型と表示される。 mode(x) # データの値の型を調べる mode(y) # xは文字型と表示されるが、yは数字型と表示される。
- 注意
- 水準は指定がないとき、アルファベット順に並べられる。水準に順番があるもの(たとえばSmallとLarge)はfactor(x, levels=c(水準の順番))で指定するか、ordered()をつかうといい。
> x<-factor(c("S","M","S")) > x [1] S M S Levels: M S > x<-factor(c("S","M","S"),levels=c("S","M")) > x [1] S M S Levels: S M > x<-ordered(c("S","M","S"),levels=c("S","M")) > x [1] S M S Levels: S < M
データ型の変換
- as.numeric(x) 数字型にする。文字には適応できない。
- as.character(x) 文字型にする。
- as.Date(x) 日付型にする。入力値は"2016-04-20"もしくは"2016/04/20"。他の形式で入力するにはパラメータformatで指定する。
- as.factor(x) factor型にする。
- factor型をas.character()に入れると、番号をLevelsに変換した値が、as.numeric()に入れると、水準の番号だけが返される。