« 2020年11月 | トップページ | 2021年1月 »

2020年12月24日 (木)

[R]多次元配列を扱う

多次元配列はarray関数で作ることができる。以下は4×3×2の多次元配列(4行3列の配列が2つからなる配列)を作成した例。要素数は4×3×2=24となる。

> array(1:24, dim = c(4, 3, 2))
, , 1
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
, , 2
[,1] [,2] [,3]
[1,] 13 17 21
[2,] 14 18 22
[3,] 15 19 23
[4,] 16 20 24
> d <- array(1:24, dim = c(4, 3, 2))
> d[2, 3, 2]
[1] 22

2020年12月20日 (日)

[R]英字を大文字(小文字)に変換する

toupper関数とtolower関数は、引数に指定した文字型データに含まれる英字を、それぞれ一括で大文字、小文字に変換する。英字ではない文字は変換せずにそのまま返す。

> s <- c("A", "bc", "D E", "あ い")
> toupper(s)
[1] "A" "BC" "D E" "あ い"
> tolower(s)
[1] "a" "bc" "d e" "あ い"

2020年12月16日 (水)

[R]相関行列を求める

cor関数を使う。以下は、以下のデータで求めた例。

No, x1,  x2
1, 190, 235
2, 85, 97
3, 94, 85
4, 151, 186

 

> x1 <- c(190, 85, 94, 151)
> x2 <- c(235, 97, 85, 186)
> mx <- matrix(c(x1, x2), 4, 2)
> mx
[,1] [,2]
[1,] 190 235
[2,] 85 97
[3,] 94 85
[4,] 151 186
> cor(mx)
[,1] [,2]
[1,] 1.0000000 0.9888381
[2,] 0.9888381 1.0000000

このcor(mx)で得られた行列が、相関行列。

2020年12月 6日 (日)

[R]データの標準化を行う

scale関数を使う。ただし、このscale関数では標準化への変換の際に、分散ではなく不偏分散(偏差平方和を「標本数-1」で割った値)を使うことに注意。

以下は、ベクトルでデータを与えた例。

> scale(c(1, 4, 9, 16,25))
[,1]
[1,] -1.0341754
[2,] -0.7239228
[3,] -0.2068351
[4,] 0.5170877
[5,] 1.4478455
attr(,"scaled:center")
[1] 11
attr(,"scaled:scale")
[1] 9.66954

引数に行列を与えると、列ごとにデータの標準化を行う。

> mx <- matrix((1:20) ^ 2, 5, 4)
> mx
[,1] [,2] [,3] [,4]
[1,] 1 36 121 256
[2,] 4 49 144 289
[3,] 9 64 169 324
[4,] 16 81 196 361
[5,] 25 100 225 400
> scale(mx)
[,1] [,2] [,3] [,4]
[1,] -1.0341754 -1.18262479 -1.21500315 -1.22911095
[2,] -0.7239228 -0.67015405 -0.65610170 -0.64967293
[3,] -0.2068351 -0.07884165 -0.04860013 -0.03511746
[4,] 0.5170877 0.59131240 0.60750157 0.61455548
[5,] 1.4478455 1.34030810 1.31220340 1.29934586
attr(,"scaled:center")
[1] 11 66 171 326
attr(,"scaled:scale")
[1] 9.66954 25.36730 41.15216 56.95173

不偏分散ではなく分散(偏差平方和を標本数で割った値)によるデータの標準化には、関数を自作する必要がある。以下は、標準偏差(偏差平方和を標本数で割った値の平方根)を求める自作関数stdと、分散によるデータの標準化を行う自作関数scaを使った例。

> std <- function(d) sqrt(sum((d - mean(d)) ^ 2) / length(d))
> sca <- function(d) (d - mean(d)) / std(d)
> sca(c(1, 4, 9, 16, 25))
[1] -1.1562432 -0.8093703 -0.2312486 0.5781216 1.6187405
> apply(mx, MARGIN = 2, sca)
[,1] [,2] [,3] [,4]
[1,] -1.1562432 -1.32221471 -1.35841482 -1.37418782
[2,] -0.8093703 -0.74925500 -0.73354400 -0.72635642
[3,] -0.2312486 -0.08814765 -0.05433659 -0.03926251
[4,] 0.5781216 0.66110736 0.67920741 0.68709391
[5,] 1.6187405 1.49851001 1.46708800 1.45271284

« 2020年11月 | トップページ | 2021年1月 »

無料ブログはココログ

■■

■■■