Sponsored Links
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
Sponsored Links
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
matrixの情報を取得する
> 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
行数や列数を取得する方法を示します。
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
[1] – R matrix入門 – Qiita
y <- subset(x, x$fall_exp=="TRUE") # ==は比較の演算子。
y
name age fall_exp QOL
3 Tanaka 26 TRUE low
5 Kikuchi 51 TRUE low
Sponsored Links