R/S-PLUSで複数の要約統計をカテゴリ別の列ごとにまとめて取得しようとしています。いくつかの関数を見つけましたが、それらはすべて、 `aggregate()のように、呼び出しごとに1つの統計を行います。
data <- c(62, 60, 63, 59, 63, 67, 71, 64, 65, 66, 68, 66,
71, 67, 68, 68, 56, 62, 60, 61, 63, 64, 63, 59)
grp <- factor(rep(LETTERS[1:4], c(4,6,6,8)))
df <- data.frame(group=grp, dt=data)
mg <- aggregate(df$dt, by=df$group, FUN=mean)
mg <- aggregate(df$dt, by=df$group, FUN=sum)
私が探しているのは、同じグループの平均、最小、最大、標準などの複数の統計情報を1回の呼び出しで取得することです、それは実行可能ですか?
tapply()
に2セントを割り当てます。
tapply(df$dt, df$group, summary)
要約を置き換える特定の統計情報を含むカスタム関数を作成できます。
dplyrパッケージは、この問題に代わる素晴らしい選択肢です。
library(dplyr)
df %>%
group_by(group) %>%
summarize(mean = mean(dt),
sum = sum(dt))
第1象限と第3象限を取得するには
df %>%
group_by(group) %>%
summarize(q1 = quantile(dt, 0.25),
q3 = quantile(dt, 0.75))
Hadley Wickhamのpurrrパッケージを使用すると、これは非常に簡単です。 split
を使用して、渡されたdata_frame
をグループに分割し、map
を使用してsummary
関数を各グループに適用します。
library(purrr)
df %>% split(.$group) %>% map(summary)
これについてはさまざまな方法がありますが、私はdescribeBy
パッケージのpsych
には賛成していません。
describeBy(df$dt, df$group, mat = TRUE)
plyr
パッケージを見てください。具体的には、ddply
ddply(df, .(group), summarise, mean=mean(dt), sum=sum(dt))
5年後、この答えはあまり注目されないはずですが、すべてのオプションを完全にするために、ここにdata.table
があります
library(data.table)
setDT(df)[ , list(mean_gr = mean(dt), sum_gr = sum(dt)) , by = .(group)]
# group mean_gr sum_gr
#1: A 61 244
#2: B 66 396
#3: C 68 408
#4: D 61 488
describeBy
に加えて、doBy
パッケージは別のオプションです。 SAS PROC SUMMARYの多くの機能を提供します。詳細: http://www.statmethods.net/stats/descriptives.html
他のアプローチのいくつかは機能しますが、これはあなたがやっていることにかなり近く、ベースrのみを使用します。集約コマンドを知っている場合、これはより直感的かもしれません。
with( df , aggregate( dt , by=list(group) , FUN=summary) )
まず、Rのバージョンに依存します。2.11をパスした場合、複数の結果関数(要約、インスタンスごと、または独自の関数)でaggreggateを使用できます。そうでない場合は、ジャスティンの答えを使用できます。