ねこすたっと

ねこの気持ちと統計について悩む筆者の備忘録的ページ。

データを要約する操作(tidyverseパッケージ)[R]

データを要約する操作のまとめ。
新しい変数を作るのと違い、要約された後は元の変数よりもベクトルの長さが短くなる。

ここでもsurvivalパッケージのpbcデータセット(の一部)を例として使う。

> library(survival)
> set.seed(1234)
> data(pbc)
> d <- pbc[1:6,1:6]
> d[6,2:6] <- NA 
> d
  id time status trt      age  sex
1  1  400      2   1 58.76523    f
2  2 4500      0   1 56.44627    f
3  3 1012      2   1 70.07255    m
4  4 1925      2   1 54.74059    f
5  5 1504      1   2 38.10541    f
6  6   NA     NA  NA       NA <NA>

tidyverseパッケージを読み込んでおく。

library(tidyverse)

summarise( )で要約する

図1:summarise( )

以下、よく使われる要約関数。

  • n():観察値(行)の数を数える(カッコ内不要)
  • n_distinct():カッコの中の変数で、固有な観測値の数(値が何種類あるか)
  • sum():合計
  • sum(!is.na()):欠測の個数
  • mean(), sd():平均値, 標準偏差
  • median(), IQR(), quantile():中央値, 四分位範囲, パーセンタイル
  • min(), max():最小値, 最大値
  • first(), last():最初の値, 最後の値

欠測を含んでいると要約できないので、まずdrop_na()で欠測を取り除いてから平均を求める。
→ drop_na( )とすると、関係ない変数に欠測があっても除去されてしまう。mean( )の中にNAを除去(remove)するための引数na.rm=TRUEを指定すればよい。

> d %>% summarise(mean_age = mean(age, na.rm=TRUE))
  mean_age
1 55.62601

group_by( )でグループ別に要約する

図2:group_by( ) %>% summarise()

どの変数で群分け(層別化)して要約するのかをgroup_by()で指定する。

d %>% group_by(sex) %>%
  summarise(mean_age = mean(age, na.rm=TRUE))
# A tibble: 3 × 2
  sex   mean_age
  <fct>    <dbl>
1 m         70.1
2 f         52.0
3 NA       NaN  

おわりに

  • ここらへんからtidyverseの便利さが一層実感できます。
  • 日の出が遅くなってきたからか、朝に窓を開けろとネコに起こされることがなくなってきました。
  • 欠測がある場合の要約について修正しました(2022-09-10)

参考資料

  • わかりやすい前田和寛(@kazutan)先生のページ。

kazutan.github.io

  • 本家ページ

dplyr.tidyverse.org