条件付き平均(承前)

クラスの成績データを次のようにしてデータフレームとして読み込んであるとする:

> Seiseki <- read.csv("seiseki.csv", header=TRUE, skip=8)

Seisekiのラベル名 "Sex" 列は、各行(各学生データに対応)で値 0 のときは男性、値 1 の時は女性を表している。 Seiseki$Sex は Seiseki の Sex 列の値の並びである。

> Seiseki$Sex
  [1] 0 1 0 1 1 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 1 1 1
  ...

一方、Seiseki$Sex==0 は Sex 列の値が「0に等しいとき」に TRUE、「そうでない」(値0に等しくない)ときに FALSE とする TRUE/FALSE データの並びであることは、次のようにしてわかる。

> Seiseki$Sex==0
  [1]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
  ...
問題 ave2-1: Seiseki の Sex 列の「値が1でない」ときに TRUE、「そうでない」ときに FALSE であるデータの並びを得るにはどのように表記されるか。
問題 ave2-2: 次の結果を説明せよ。
> (Seiseki$Sex != 1) & (Seiseki$Sex == 0)
  [1]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
 [13]  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
  ...
> (Seiseki$Sex != 1) && (Seiseki$Sex == 0)
[1] TRUE

Rでは次のような論理値を扱う定数、演算子、関数がある。

表記用途
TRUE
FALSE
!否定
==  /  !=等しい / 等しくない
>  /  >=大きい / 大きいか等しい
<  /  <=小さい / 小さいか等しい
&  /  &&要素ごとの論理積 / 単一の論理積
|  /  ||要素ごとの論理和 / 単一の論理和
xor(x, y)x と y の排他的論理和

Seiseki の Sex 列が男性を表す行を TRUE(そうでなければFALSE)とする TRUE/FALS E並び Seiseki$Sex == 0 を Men とする。 データフレーム Seiseki において、男性である行だけに注目して 3列(Eng), 4列(Lang), 5列(Math) までの連続する列データ Seiseki[Men,3:5] の平均を関数 mean( ) で求め、男性の各科目平均として MenMean にセットする。

> Men <- Seiseki$Sex==0
> MenMean <- mean(Seiseki[Men,3:5])
 English     Lang     Math 
63.39394 71.13131 52.51515 

同様に、Seiseki の Sex 列が女性を表す行を TRUE(そうでなければFALSE)とする TRUE/FALSE 並び Seiseki$Sex == 1 を Women とする。 データフレーム Seiseki において、女性である行だけに注目して 3列(Eng), 4列(Lang), 5列(Math) までの連続する列データ Seiseki[Women,3:5] の平均を関数 mean( ) で求め、女性の各科目平均として WomenMean にセットする。

> Women <- Seiseki$Sex==1
> WomenMean <- mean(Seiseki[Women,3:5])
 English     Lang     Math 
59.86139 69.82178 55.11881 

男女の各科目平均のデータ並び MenMean と WomenMean とを行列の列値として結合するために関数 cbind( ) を使い、Means とする。 その次元を関数 dim( ) で確かめると、3 x 2 行列であることが確かめられる。

> Means <- cbind(MenMean, WomenMean)
> dim(Means)
[1] 3 2
> Means
         MenMean WomenMean
English 63.39394  59.86139
Lang    71.13131  69.82178
Math    52.51515  55.11881

データ Mean を使って、各科目について男女の科目平均(2列からなる)を棒グラフとして並べて表示する。 このとき、行列データ Mean を行列の転置を行う関数 t( ) 使っていることに注意。

> barplot(t(Means), beside=TRUE, main="Men-Women Ave", ylab="Point", ylim=c(0,100))

問題 ave2-3: 次は何を表しているか。
> BadMathMen <- Seiseki$Sex==0 & Seiseki$Math < 50
> BadMathMen
  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
  ...
問題 ave2-4: 次は何を表しているか。
> BadMathMenMean <- mean(Seiseki[BadMathMen,3:5])
> BadMathMenMean
     Eng     Lang     Math 
63.26667 70.77778 36.62222 
問題 ave2-5: 問題ave2-4の結果を、表計算ソフトウエアを使って得るにはどのようにすればよいか。