Rでvectorやmatrix、data.frameを操作

vectorの操作

vector要素の抽出

R Console
> x <- c(11,12,13,14,15) # ベクトルを作成。
> x[2] # 2番目の要素を抽出。
[1] 12
> x[5] # 5番目の要素を抽出。
[1] 15
> x[7] # 7番目の要素を抽出。ないので、NAが返ってくる。
[1] NA
> x[c(2,4)] # 抽出する要素を複数指定できる。2番目と4番目の要素を抽出。
[1] 12 14
> x[c(-2,-4)] # 「-」を付けると削除。2番目と4番目のベクトルを削除。
[1] 11 13 15
> x[x>12] # 条件付きで指定。ベクトルxのうち、12より大きい要素を抽出。
[1] 13 14 15
> x[c(x>14 | x<12)] # 「|」は「もしくは」の意味。14より大きいもしくは12より小さい要素を抽出。
[1] 11 15 
> x[c(x>12 & x<15)] # 「&」は「かつ」の意味。12より大きいかつ15より小さい要素を抽出。
[1] 13 14

vector要素の追加・結合

R Console
> x <- c(11) # ベクトルxを作成え。
> x[2] <- 12 # ベクトルxの2番目の要素に12を指定。 
> x # ベクトルxを表示。
[1] 11 12
> x[4] <- 14 # ベクトルxの4番目の要素に14を指定。 
> x # ベクトルxを表示。3番目の要素はないのでNAと表示される。
[1] 11 12 NA 14
> x[c(3,5)] <- c(13,15) # ベクトルxの3番目と5番目の要素に、それぞれ13と15を指定。 
> x # ベクトルxを表示。
[1] 11 12 13 14 15
> y <- c(18,19,20) # ベクトルyを作成。 
> z <- c(x,y) # ベクトルxとベクトルyを結合し、ベクトルzを作成。 
> z
[1] 11 12 13 14 15 18 19 20
> a <- c(16,17) # ベクトルaを作成。 
> append(z, a, after=5) # ベクトルzの5番目の要素の後ろにベクトルaを加える。関数appendを使用。オプションafterでベクトルxの◯番目の後ろにベクトルaを加えるかを指定できる。
 [1] 11 12 13 14 15 16 17 18 19 20

vector要素の置換

R Console
> x0 <- c(11,12,13,14,15) # ベクトルx0を作成。
> x1 <- replace(x0, 3, 35) # replace関数を使って、ベクトルx0の3番目の要素を35に置換し、ベクトルx1に指定。
> x1 # x1を表示。
[1] 11 12 35 14 15
> x2 <- replace(x1, c(2,4,5), c(34,36,37)) # replace関数の置換はベクトル形式でも指定できる。2、4、5番目の要素をそれぞれ34、36、37に置換し、ベクトルx2に指定。 
> x2 # x2を表示。
[1] 11 34 35 36 37
> x3 <- replace(x2, (x2<34), 33) # replace関数の置換は条件式でも指定できる。ベクトルx2のうち34より小さい要素を全て33に置換し、ベクトルx3に指定。 
> x3 # x3を表示。
[1] 33 34 35 36 37

 

matrixの操作

行列の基本的な操作は、Rのデータ型 | データ型の種類のmatrix型の項目も参照してください。

matrixの行の名前、列の名前を付ける

R Console
> x <- matrix(1:16, ncol = 4) # 1から16までの整数を生成し、列数4の行列を作る。
> x # xを表示。
     [,1] [,2] [,3] [,4] # 行名や列名は自動で数字が割り振らレている。
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16
> colnames(x) <- c("a","b", "c", "d") # 列名をベクトル型で指定する。
> rownames(x) <- c("p", "q", "r", "s") # 行名をベクトル型で指定する。
> x
  a b  c  d
p 1 5  9 13
q 2 6 10 14
r 3 7 11 15
s 4 8 12 16

matrixの一部を取り出す

Rでは[行の位置, 列の位置]で行列の位置を指定することができます。

R Console
> x[2, 2:4] # 2行目の2から4列目までの数値を指定。
b  c  d
6 10 14
> x[2:4, 2] # 2列目の2から4行目の数値を指定。
q r s
6 7 8
> x["r", 2:4] # "r"行における2から4列目というように行名でも指定できる。
b  c  d
7 11 15
> x[2:4, "c"] # 列名も同様に指定できる。
q  r  s
10 11 12
> x[2:4, "c", drop=FALSE] # 1つの行や列を指定するとベクトルになるが、オプションdrop=FALSEを指定すればmatrixが保持される。
   c
q 10
r 11
s 12
matrixの情報を取得する

行数や列数を取得する方法を示します。

R Console
> nrow(x) # 行数を取得。
[1] 4
> ncol(x) # 列数を取得。
[1] 4
> dim(x) # dim関数は行数と列数を指定する関数であり、行数と列数を表示できる。
[1] 4 4

行名と列名を取得する。

R Console
> rownames(x) # 行名を指定。
[1] "p" "q" "r" "s"
> colnames(x) # 列名を指定。
[1] "a" "b" "c" "d"

matrixに新たな行列を追加する

列を追加するときはcbind関数を使う。colmn(列)をbind(束ねる)という意味だと思います。行を追加するときはrbindです。以下にはcbindの例を示します。また、ベクトルを行や列に追加することもできますので、その例も示します。

R Console
> y1 <- matrix(17:24, nrow = 4) # 17から24までの整数からなる4行2列の行列を作成。 
> y1 # y1を表示。
     [,1] [,2]
[1,]   17   21
[2,]   18   22
[3,]   19   23
[4,]   20   24
> x <- cbind(x, y1) # xとy1を束ねて、再びxとして指定。
> x
  a b  c  d      
p 1 5  9 13 17 21
q 2 6 10 14 18 22
r 3 7 11 15 19 23
s 4 8 12 16 20 24
> y2 <- c(6, 5, 4, 3, 2, 1) # ベクトルy2を作成。
> x <- rbind(x, y2) # rbind関数を使って行として束ねる。
> x
   a b  c  d      
p  1 5  9 13 17 21
q  2 6 10 14 18 22
r  3 7 11 15 19 23
s  4 8 12 16 20 24
y2 6 5  4  3  2  1

matrixの演算

R Console
> h <- matrix(c(172, 168, 175, 154, 161, 151), nrow = 3 ) # 3行2列の身長データ
> w <- matrix(c(67, 65, 70, 51, 58, 49), nrow = 3 ) # 3行2列の体重データ
> colnames(h) <- c("m_height", "f_height") # 男性と女性の身長という意味で列名を付ける。
> colnames(w) <- c("m_weight", "f_weight") # 男性と女性の体重という意味で列名を付ける。 
> h
     m_height f_height
[1,]      172      154
[2,]      168      161
[3,]      175      151
> w
     m_weight f_weight
[1,]       67       51
[2,]       65       58
[3,]       70       49
> BMI <- w / (h*0.01)^2 
> BMI
     m_weight f_weight
[1,] 22.64738 21.50447
[2,] 23.03005 22.37568
[3,] 22.85714 21.49029

 

data.frameの操作

data.frameもmatrixと同じように扱えますが、ここではmatrixの操作で紹介しなかった事項をまとめておきます。data.frameの操作は、Rのデータ型 | データ型の種類のdata.frame型の記事も参照ください。

R Console
> x <- data.frame(name=c("Yamada", "Sato", "Tanaka", "Shimizu", "Kikuchi"), 
age=c(43, 63, 24, 55, 49), QOL=c("high", "high", "low", "medium", "low"), 
fall_exp=c(FALSE, FALSE, TRUE, FALSE, TRUE)) # データフレームを作成。

> x # xを表示。
     name age    QOL fall_exp
1  Yamada  43   high    FALSE
2    Sato  63   high    FALSE
3  Tanaka  24    low     TRUE
4 Shimizu  55 medium    FALSE
5 Kikuchi  49    low     TRUE
> x <- x[, c(1,2,4,3)] # 3列目と4列目を入れ替える。
> x # xを表示。
     name age fall_exp    QOL
1  Yamada  43    FALSE   high
2    Sato  63    FALSE   high
3  Tanaka  24     TRUE    low
4 Shimizu  55    FALSE medium
5 Kikuchi  49     TRUE    low
> x[, "age"] <- x[, "age"]+2 # 列ageに2を加える。
> x # xを表示。
     name age fall_exp    QOL
1  Yamada  45    FALSE   high
2    Sato  65    FALSE   high
3  Tanaka  26     TRUE    low
4 Shimizu  57    FALSE medium
5 Kikuchi  51     TRUE    low

上のデータフレームxでfall_exp列がTRUEの行だけを抽出するにはsubset関数を使います。

R Console
y <- subset(x, x$fall_exp=="TRUE") # ==は比較の演算子。
y
     name age fall_exp QOL
3  Tanaka  26     TRUE low
5 Kikuchi  51     TRUE low
[1] – R matrix入門 – Qiita

Print Friendly, PDF & Email

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください