R logo

データフレーム内の合計や平均値などを求める時、Rでは「aggregate関数」が用意されている。

けど、比較的作業時間がかかるため、「dplyr::summarise」の方が良さげ。

ちょっとした集計:dplyr::summarise

全体での平均値を出す場合

例えば、下記テーブル "Data" の "FN" と "NFT" の列の平均値を出したい場合。

summarise-1
Data %>%
dplyr::summarise(FN=mean(FN),NFT=mean(NFT))

とする。

summarise-2

 

グループ毎の平均値を出す場合

例えば、上記テーブル "Data" の "FN" と "NFT" の列で、”Sex" と "Group" と ”Region” 毎に平均値を出したい場合。

先に「group_by」でグループを指定してから「summarise」すると良い。

Data %>%
group_by(Sex,Group,Region) %>%
summarise(FN=mean(FN),NFT=mean(NFT))

 

summarise-3

標準偏差(SD)を出す場合

Data %>%
group_by(Sex,Group,Region) %>%
summarise(sd_FN=sd(FN),sd_NFT=sd(NFT))

注意事項として、mean や SD のラベルをデータフレームの列のラベルと一緒にしてしまうと、元のラベル名がベクトルではなく1個の値になってしまうので SD が NA になってしまうらしい。

ので、それを避けるために、

  • mean のラベルは mean_列名
  • SD のラベルは sd_列名

などのように、区別してラベリングするとよい。

 

もしくは、「across() 」を組み合わせる。

Data %>%
  group_by(Sex,Group,Region) %>% 
  summarise(
    across(
      NFT,
      list(
        mean = mean,
        sd = sd
      )
    )
  )
にほんブログ村 科学ブログ 脳科学へ
にほんブログ村 子育てブログ ワーキングマザー育児へ

References