投稿

ラベル(cat)が付いた投稿を表示しています

Rのtapply関数を使って、複数の度数分布表・ヒストグラムをまとめて出力する

イメージ
tapplyを使えば、データフレームのカテゴリの列でグループ分けしつつ、値の列に対して関数を適用するということができます。 ・・・と言っても分かりにくいと思いますので、具体的なサンプルをあげてみますと、 > # サンプルデータを作る > 名前 <- c("A", "B",  "C", "D",  "E", "F") > 性別 <- c("男", "男", "女", "男", "女", "女" ) > 身長 <- c(175,  165, 165,  170, 160, 155  ) > df <- data.frame(名前, 性別, 身長) > df   名前 性別 身長 1    A   男  175 2    B   男  165 3    C   女  165 4    D   男  170 5    E   女  160 6    F   女  155 > > # ここから本題 > tapply(df$身長, df$性別, mean)    女  男 160 170 性別でグループ分けして、身長の平均を算出する(mean関数を適用)という感じです。 第3引数にhist関数を指定してやれば、グループ分けを適用したあとに、複数の度数分布表を算出したり、複数の度数分布図(ヒストグラム)を書いたりすることもできます。 もう少し大きいサンプルデータを使いましょう。↓この本に載っていたサンプルを使わせていただきます。 ↓こちらからダウンロードできる、"年収.csv"を使います。 データマイニング入門-Rで学ぶ最新データ解析 - 東京図書 ↓こんな感じのサンプルデータです。 > d <- rea...

Rのduplicated関数を使ってデータフレームの重複チェック(改)

duplicated関数の引数にデータフレームを指定すると、すべての項目(列)を組み合わせた上での重複チェックができますよ、という話を以前書きました↓ Rのデータフレームで複数項目を組み合わせた重複のチェック - Rプログラミングの小ネタ また、上記の記事では、すべてではなく一部の項目のみを組み合わせ対象にしたい場合は、interaction関数を使って新たにチェック用の列を作ってはどう?、というやり方も紹介しました。 が、duplicated関数がすべての列を対象にする動きなら、対象にしたい列だけで構成された新たなデータフレームを生成して、duplicated関数に渡した方がシンプルではないか、ということに気づきました。 例えば↓こんなデータがあって、 > d    名字 名前 年齢 1  伊東 二郎   52 2  佐藤 五郎   52 3  遠藤 太郎   53 4  後藤 太郎   53 5  近藤 五郎   28 6  遠藤 二郎   33 7  後藤 四郎   52 8  須藤 次郎   28 9  伊東 二郎   35 10 遠藤 太郎   23 11 遠藤 史郎   38 12 工藤 吾郎   53 13 須藤 太郎   22 14 武藤 二郎   28 15 工藤 吾郎   53 16 伊東 二郎   22 17 遠藤 四郎   33 18 後藤 史郎   38 19 加藤 一郎   28 20 加藤 二郎   22 名字と名前だけを対象として重複チェックをしたい場合は、 > sum(duplicated( data.frame(d$名字, d$名前) )) [1] 4 とか、 > d[duplicated( data.frame(...