理学療法士がまとめたノート

統計学備忘録 since2016

Rを使って統計学を勉強するブログです

配列 (array) の基本

配列 (array) の基本
投稿日2017.10.4

リスト:異なるデータ構造をまとめて一つのオブジェクトとして保存.解析結果の多くはリスト形式.
配列:次元を自由に設定できるオブジェクト.

RのサンプルHairEyeColorを通して勉強していきます

> HairEyeColor
, , Sex = Male

       Eye
Hair    Brown Blue Hazel Green
  Black    32   11    10     3
  Brown    53   50    25    15
  Red      10   10     7     7
  Blond     3   30     5     8

, , Sex = Female

       Eye
Hair    Brown Blue Hazel Green
  Black    36    9     5     2
  Brown    66   34    29    14
  Red      16    7     7     7
  Blond     4   64     5     8

女性だけ取り出してみます

> HairEyeColor[,,2]
       Eye
Hair    Brown Blue Hazel Green
  Black    36    9     5     2
  Brown    66   34    29    14
  Red      16    7     7     7
  Blond     4   64     5     8

金髪の目の色のデータ

> HairEyeColor[4,,]
       Sex
Eye     Male Female
  Brown    3      4
  Blue    30     64
  Hazel    5      5
  Green    8      8

青い目をした男性の髪の色データ

> HairEyeColor[,2,1]
Black Brown   Red Blond 
   11    50    10    30 

HairEyeColorはどんあデータになっているのか?

> HairEyeColor[1:32]
32 53 10  3 11 50 10 30 10 25  7  5  3 15  7  8 36 66 16  4  9 34  7 64  5 29  7  5  2 14 7  8

それではこのベクトルからHairEyeColorを作ってみましょう

> dat <- c(HairEyeColor[1:32])   #ベクトルdatを作成
> dat
 [1] 32 53 10  3 11 50 10 30 10 25  7  5  3 15  7  8 36 66 16  4  9 34  7 64  5 29  7  5  2 14
[31]  7  8
> class(dat)
[1] "numeric"

arrayを使用して多次元のクロス表を作成します(意外と簡単!)

> dat <- array(dat, dim = c(4,4,2))
> dat
, , 1

     [,1] [,2] [,3] [,4]
[1,]   32   11   10    3
[2,]   53   50   25   15
[3,]   10   10    7    7
[4,]    3   30    5    8

, , 2

     [,1] [,2] [,3] [,4]
[1,]   36    9    5    2
[2,]   66   34   29   14
[3,]   16    7    7    7
[4,]    4   64    5    8

各項目の名前を付けます(日本語で・・・)

> name <- list(Hair=c("黒","茶","赤","金"),Eye=c("茶","青","榛","緑"),Sex=c("男性","女性"))
> dimnames(dat)<-name
> dat
, , Sex = 男性

    Eye
Hair 茶 青 榛 緑
  黒 32 11 10  353 50 25 1510 10  7  73 30  5  8

, , Sex = 女性

    Eye
Hair 茶 青 榛 緑
  黒 36  9  5  266 34 29 1416  7  7  74 64  5  8

HairEyeColorとdatの構成要素を見てみます

> str(HairEyeColor)
 table [1:4, 1:4, 1:2] 32 53 10 3 11 50 10 30 10 25 ...
 - attr(*, "dimnames")=List of 3
  ..$ Hair: chr [1:4] "Black" "Brown" "Red" "Blond"
  ..$ Eye : chr [1:4] "Brown" "Blue" "Hazel" "Green"
  ..$ Sex : chr [1:2] "Male" "Female"

> str(dat)
 num [1:4, 1:4, 1:2] 32 53 10 3 11 50 10 30 10 25 ...
 - attr(*, "dimnames")=List of 3
  ..$ Hair: chr [1:4] "黒" "茶" "赤" "金"
  ..$ Eye : chr [1:4] "茶" "青" "榛" "緑"
  ..$ Sex : chr [1:2] "男性" "女性"

多次元データdatを2次元の表にまとめてみます

> ftable(dat)
         Sex 男性 女性
Hair Eye              
黒   茶        32   3611    910    53    2
茶   茶        53   6650   3425   2915   14
赤   茶        10   1610    77    77    7
金   茶         3    430   645    58    8

石田 基広 ;改訂3版 R言語逆引きハンドブック ,シーアンドアール研究所; 改訂3版,2016