条件付き平均(承前)

クラスの成績データを次のようにしてデータフレームとして読み込んであるとする:
> Seiseki <- read.csv("U:R/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( )排他的論理和

SeisekiのSex列が男性を表す行をTRUE(そうでなければFALSE)とするTRUE/FALSE並び 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の結果を、表計算ソフトウエアを使って得るにはどのようにすればよいか。