山羊の午後

研究関係の備忘録。

Rの基礎、ベクトルとデータ型

ベクトル

  • Rで使われるベクトルは「複数の値をひとまとめに並べたもの」を意味する。
  • 値には「並べた順番」がつけられ [ ] で示される。番地みたいなもの。これを使って値を呼び出せる。
  • 数値、文字、論理値など色々なデータ型の値をいれることができる。ただし、種類の異なる値を混ぜて入れることは出来ない。
    • たとえば、文字と数字を混ぜて入力すると、数字も文字として扱われ、文字型のベクトルになる。文字型として代入された数字は、計算することが出来ない。
関数 c()
入力された値をひとまとめに並べて、ベクトルを作る。値はベクトル内で順番(例 [1])を与えられる。

f:id:yk_uminami:20160607215302p:plain

変数へのベクトルの代入と、その結果の違いを見る

#変数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型の違い

f:id:yk_uminami:20160607221154p:plain

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()に入れると、水準の番号だけが返される。