スタートページ> JavaScript> 他言語> R言語
主要関数 sum(v) 合計 var(v) 不偏分散:偏差平方和を(データ数-1)で割った値, sd(v) 標準偏差:不偏分散の生の平方根 apply(m, side=1/2, 関数) 行・列への関数の適用 cov(m) 共分散行列 cor(m) 相関行列 sort(v) ソート order(v) 順序つけ det(m) 行列式の値 t(m) 転置行列 solve(m) 逆行列 eigen(m) 固有値、固有ベクトル
length() 要素数 max() 最大値、min() 最小値, mean() 算術平均, median() 中央値, quantile() 分位点, range() 範囲:最大値から最小値の差, sum() 合計, var() 不偏分散:偏差平方和を(データ数-1)で割った値, sd() 標準偏差:不偏分散の生の平方根
# ベクトル v <- c(30, 20, 50, 10, 40) sum(v) # 150 # 行列 # [,1] [,2] [,3] m <- matrix(c(11, 12, 13, # [1,] 11 12 13 21, 22, 23), # [2,] 21 22 23 nrow=2, byrow=T) sum(m) # 102 sum(m[1, ]) # 36 11+12+13 sum(m[ , 1]) # 32 11+21 # 行列 apply関数 #一般形 apply(配列, MARGIN, 関数) # 戻り値はベクトル # MARGIN = 1 行対象 # 2 列対象 # c(1,2) 全要素 apply(m, 1, sum) # 36 66 11+12+13 21+22+23 apply(m, 2, sum) # 32 34 36 11+21 12+22 13+23 # データフレーム df <- data.frame( # c1 c2 c1 = c(11, 21, 31), # 1 11 12 c2 = c(12, 22, 32)) # 2 21 22 # 3 31 32 df.sum() # エラー sum(df) # 129 sum(df['c1']) # 63 sum(df$c1) # 63 apply(df, 2, sum) # c1 c2 # 63 66
分散や相関を求めるには、基本統計関数を組み合わせて求めることもできますが、次の関数を使えば簡単に記述できます。
var() # 不偏分散 不偏分散と同じ cov() # 共分散行列 cor() # 相関行列 cov2cor() # 共分散行列を相関行列に変換する関数
このような処理では、データフレームが広く用いられるので、それを入力データとします。出力は matrix になります。
df <- data.frame(体重=c( 56, 70, 75, 68, 58, 64, 53, 68, 65, 59), 身長=c(168,181,178,179,171,174,174,178,179,169), 腹囲=c( 65, 78, 83, 75, 72, 72, 67, 78, 69, 73)) var(df) # 不偏分散 # 体重 身長 腹囲 # 体重 48.26667 24.71111 33.42222 # 身長 24.71111 20.98889 14.86667 # 腹囲 33.42222 14.86667 30.17778 cov(df) # 分散共分散行列 不偏分散と同じ # 体重 身長 腹囲 # 体重 48.26667 24.71111 33.42222 # 身長 24.71111 20.98889 14.86667 # 腹囲 33.42222 14.86667 30.17778 m <= cov(df) m["身長","体重"} # 24.71111 m[2,1] # 24.71111 cor(df) # 相関行列 # 体重 身長 腹囲 # 体重 1.000000 0.776379 0.875725 # 身長 0.776379 1.000000 0.590711 # 腹囲 0.875725 0.590711 1.000000 cov2cor(cov(df)) # 体重 身長 腹囲 # 体重 1.000000 0.776379 0.875725 # 身長 0.776379 1.000000 0.590711 # 腹囲 0.875725 0.590711 1.000000
# 単純ソート sort v <- c(50, 30, 20, 40) sort(v) # 昇順 20 30 40 50 sort(v, decreasing=T) # 降順 50 40 30 20 # 順序つけ order v <- c(50, 30, 20, 40) k <- order(v) # 3 2 4 1 # ↑ # k[1]=v[3]=20 # k[2]=v[2]=30 # k[3}=v[4]=40 # k[4]=v[1]=50 order(-v) # 降順 1 4 2 3
# 入力 # [,1] [,2] [,3] [,4] m <- matrix(c(5,3,1,4, # [1,] 5 3 1 4 3,4,1,3, # [2,] 3 4 1 3 3,1,3,1, # [3,] 3 1 3 1 4,2,4,3), # [4,] 4 2 4 3 ncol=4, byrow=T) # 列をキーにしたソート 一般形 行列[order(行列[,キー列]), ] # 列1をキーにして昇順にソート order(m[,1]) # 2 3 4 1 # 他の行もこの順序にする m[order(m[,1]), ] # [,1] [,2] [,3] [,4] # [1,] 3 *4 1 3 # [2,] 3 *1 3 1 # [3,] 4 2 4 3 # [4,] 5 3 1 4 # └ キー列 昇順 # 複数のキー列によるソート # 一般形 行列[order(行列[,キー列1], 行列[, キー列2], 行列[, キー列3], …)] # 列1を順位1、列2を順位2としてソート m[order(m[,1], m[,2]), ] # [,1] [,2] [,3] [,4] # [1,] 3 *1 3 1 * の行が入れ替わった # [2,] 3 *4 1 3 # [3,] 4 2 4 3 # [4,] 5 3 1 4 # 行をキーとしたソート 一般形 行列[, order(行列[キー行, ])] # 行1の降順でソート order(m[1,], decreasing=T) # 降順 1 4 2 3 m[ , order(m[1,], decreasing=T)] # [,1] [,2] [,3] [,4] # [1,] 5 4 3 1 降順ソート # [2,] 3 3 4 1 # [3,] 3 1 1 3 # [4,] 4 3 2 4
本来、データフレームは並びの順序は問わない形式なのですが、出力の見やすさなどのためにソートすることがあります。
行をキーとするソートは、実務的には稀ですので省略します。列をキーとするソートは、行列とほぼ同じです。
# c1 c2 c3 c4 df <- data.frame(c1=c(5, 3, 3, 4), # r1 5 3 1 4 c2=c(3, 4, 1, 2), # r2 3 4 1 3 c3=c(1, 1, 3, 4), # r3 3 1 3 1 c4=c(4, 3, 1, 3)) # r4 4 2 4 3 rownames(df) <- c('r1','r2','r3','r4') # c1列を順位1、c2列を順位2としてソートします。 df[order(df$c1,df$c2), ] # c1 c2 c3 c4 # r3 3 1 3 1 # r2 3 4 1 3 # r4 4 2 4 3 # r1 5 3 1 4
# [,1] [,2] m <- matrix(c(2, 3, # [1,] 2 3 1, 2), # [2,] 1 2 nrow=2, byrow=T) det(m) # 1 (= 2x2 - 3x1)
m <- matrix(c(11, 12, 13, 21, 22, 23), nrow=2, byrow=T) t(m) # [,1] [,2] # [1,] 11 21 # [2,] 12 22 # [3,] 13 23
# [,1] [,2] m <- matrix(c(2, 3, # [1,] 2 3 1, 2), # [2,] 1 2 nrow=2, byrow=T) solve(m) # [,1] [,2] # [1,] 2 -3 # [2,] -1 2
次の連立一次方程式の解を求めます。 2x + 3y = 7 1x + 2y = 4 # 方程式の定義 m <- matrix(c(2, 3, 1, 2), nrow=2, byrow=T) # 係数 b <- c(7, 4) # 定数項 # 求解 解 <- solve(m) %*% b # 内積 解[1] # 2 (=x) 解[2] # 1 (=y)
# [,1] [,2] m <- matrix(c(2, 3, # [1,] 2 3 1, 2), # [2,] 1 2 nrow=2, byrow=T) eigen(m) # eigen() decomposition # $values # [1] 3.7320508 0.2679492 # $vectors # [,1] [,2] # [1,] 0.8660254 -0.8660254 # [2,] 0.5000000 0.5000000 結果 <- eigen(m) 固有値 <- 結果$values 固有ベクトル <- 結果$vectors 固有値[1] # 3.7320508 固有ベクトル[1,2] # -0.8660254