条件付き平均(承前)
クラスの成績データを次のようにしてデータフレームとして読み込んであるとする:> 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の結果を、表計算ソフトウエアを使って得るにはどのようにすればよいか。