No.21741 【R】データの要約  【赤羽】 2015/07/23(Thu) 22:56

青木先生,
赤羽と申します,いつもご教示を頂戴し,誠にありがとうございます。
改めて御礼を申し上げます。

本来ならば,自分で作成したRコードをお示ししながら,ご教示を頂戴すべきですが,
恥ずかしながら,今回は,何もできない状況です。

−−−

データ分析でよく引用される「タイタニック」のデータを用いて,やりたいことをご説明いたします。

「タイタニック」のデータは,以下のとおりです。

(1) 変数は4つです。
 ・等級(1等,2等,3等,乗務員)
 ・年代(大人,子供)
 ・性別(男性,女性)
 ・生死(生還,死亡)

(2) レコード数は,2201件です。

添付画像をご覧ください。

表1は,生データです。

表2は,4変数の組み合わせをグループとして,その度数を,整理したものです。

やりたいことは,表1の生データから,表2を自動生成するRコードです。

具体的なRコードを作成できませんが,
恐らくは,以下のような処理を行うのではないかと,思っています。

(1) 4変数の組み合わせをグループ化して,新しい列データとして追加する
(2) 上記の列データをグループとして指示して,merge関数等の集約関数を適用する

Rコードをご教示いただけましたら,大変に助かります。
どうぞ,よろしくお願いいたします。


No.21742 Re: 【R】データの要約  【青木繁伸】 2015/07/24(Fri) 10:43

# テストデータ(そもそも Titanic は "table" なので,それを展開して元データを作る)
# 既に,どこかに誰かが作った元データがあるなら以下は不要
TITANIC <- data.frame(Titanic)
TITANIC <- data.frame(lapply(TITANIC, function(i) rep(i, TITANIC[,"Freq"])))[-5]

# 以下は,表2.の通りになるように変数名等の付け替えをする(不要なら省く)
colnames(TITANIC)[4] <- "Alive"
TITANIC[,1] <- factor(TITANIC[,1], levels=c("1st", "2nd", "3rd", "Crew"), labels=c("1等", "2等", "3等", "乗務員"))
TITANIC[,2] <- factor(TITANIC[,2], levels=c("Female", "Male"), labels=c("男性", "女性"))
TITANIC[,3] <- factor(TITANIC[,3], levels=c("Child", "Adult"), labels=c("子ども", "大人"))
TITANIC[,4] <- factor(TITANIC[,4], levels=c("No", "Yes"), labels=c("死亡", "生還"))

# 表2. の通りに出力するために,面倒なことをやる
result <- data.frame(a=expand.grid(c("死亡", "生還"), c("男性", "女性"), c("子ども", "大人"), c("1等", "2等", "3等", "乗務員"))[,4:1],
b = ftable(TITANIC, row.vars=c(1,3,2,4))[,1,drop=FALSE])
colnames(result) <- c("Class", "Age", "Sex", "Alive", "度数")
print(result[result[,5]>0,], row.names=FALSE)
Class Age Sex Alive 度数
1等 子ども 男性 生還 1
1等 子ども 女性 生還 5
1等 大人 男性 死亡 4
1等 大人 男性 生還 140
1等 大人 女性 死亡 118
1等 大人 女性 生還 57
2等 子ども 男性 生還 13
2等 子ども 女性 生還 11
2等 大人 男性 死亡 13
2等 大人 男性 生還 80
2等 大人 女性 死亡 154
2等 大人 女性 生還 14
3等 子ども 男性 死亡 17
3等 子ども 男性 生還 14
3等 子ども 女性 死亡 35
3等 子ども 女性 生還 13
3等 大人 男性 死亡 89
3等 大人 男性 生還 76
3等 大人 女性 死亡 387
3等 大人 女性 生還 75
乗務員 大人 男性 死亡 3
乗務員 大人 男性 生還 20
乗務員 大人 女性 死亡 670
乗務員 大人 女性 生還 192

# 本来は,ftable だけで同じ情報を持つ結果が出力される
# 表側の順序だけは,row.vars で指定しておく
ftable(TITANIC, row.vars=c(1,3,2,4))

Class Age Sex Alive
1等 子ども 男性 死亡 0
生還 1
女性 死亡 0
生還 5
大人 男性 死亡 4
生還 140
女性 死亡 118
生還 57
2等 子ども 男性 死亡 0
生還 13
女性 死亡 0
生還 11
大人 男性 死亡 13
生還 80
女性 死亡 154
生還 14
3等 子ども 男性 死亡 17
生還 14
女性 死亡 35
生還 13
大人 男性 死亡 89
生還 76
女性 死亡 387
生還 75
乗務員 子ども 男性 死亡 0
生還 0
女性 死亡 0
生還 0
大人 男性 死亡 3
生還 20
女性 死亡 670
生還 192

No.21743 【御礼】 Re: 【R】データの要約  【赤羽】 2015/07/24(Fri) 21:43

青木先生,
赤羽と申します,いつもご教示を頂戴し,誠にありがとうございます。

今回も,丁寧に,詳細に,暖かいご教示を頂戴し,心から御礼を申し上げます。

1行,1行,丁寧にトレースさせていただき,考え方をしっかり勉強させていただきます。

ありがとうございました。

● 「統計学関連なんでもあり」の過去ログ--- 047 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る