91

R / S-PLUSで、カテゴリ列ごとにグループ化された複数の要約統計量を1回のショットで取得しようとしています。いくつかの関数を見つけましたが、それらはすべて、のように、呼び出しごとに1つの統計を実行しますaggregate()

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回の呼び出しで取得することですが、それは実行可能ですか?

4

13 に答える 13

130

1.tapply

に 2 セントを入れますtapply()

tapply(df$dt, df$group, summary)

必要な特定の統計を使用してカスタム関数を作成するか、結果をフォーマットすることができます。

tapply(df$dt, df$group,
  function(x) format(summary(x), scientific = TRUE))
$A
       Min.     1st Qu.      Median        Mean     3rd Qu.        Max. 
"5.900e+01" "5.975e+01" "6.100e+01" "6.100e+01" "6.225e+01" "6.300e+01" 

$B
       Min.     1st Qu.      Median        Mean     3rd Qu.        Max. 
"6.300e+01" "6.425e+01" "6.550e+01" "6.600e+01" "6.675e+01" "7.100e+01" 

$C
       Min.     1st Qu.      Median        Mean     3rd Qu.        Max. 
"6.600e+01" "6.725e+01" "6.800e+01" "6.800e+01" "6.800e+01" "7.100e+01" 

$D
       Min.     1st Qu.      Median        Mean     3rd Qu.        Max. 
"5.600e+01" "5.975e+01" "6.150e+01" "6.100e+01" "6.300e+01" "6.400e+01"

2.data.table

このdata.tableパッケージは、これらのタイプの操作に役立つ多くの高速ツールを提供します。

library(data.table)
setDT(df)
> df[, as.list(summary(dt)), by = group]
   group Min. 1st Qu. Median Mean 3rd Qu. Max.
1:     A   59   59.75   61.0   61   62.25   63
2:     B   63   64.25   65.5   66   66.75   71
3:     C   66   67.25   68.0   68   68.00   71
4:     D   56   59.75   61.5   61   63.00   64
于 2012-03-24T10:12:33.690 に答える
39

Hadley Wickham の purrr パッケージを使用すると、これは非常に簡単です。を使用splitして渡さdata_frameれたものをグループに分割し、次に を使用して各グループに関数を map適用します。summary

library(purrr)

df %>% split(.$group) %>% map(summary)
于 2016-08-12T14:52:20.130 に答える
19

これにはさまざまな方法がありますが、私はパッケージに部分的describeByですpsych

describeBy(df$dt, df$group, mat = TRUE) 
于 2012-03-24T05:46:24.437 に答える
12

plyrパッケージを見てください。具体的には、ddply

ddply(df, .(group), summarise, mean=mean(dt), sum=sum(dt))
于 2012-03-23T22:13:41.767 に答える
7

このpsychパッケージには、グループ化された要約統計のための優れたオプションがあります。

library(psych)
    
describeBy(dt, group="grp")

平均値、中央値、範囲、sd、se など、多くの有用な統計情報を生成します。

于 2020-03-09T10:50:32.027 に答える
6

またdescribeBydoByパッケージは別のオプションです。これは、SAS PROC SUMMARY の多くの機能を提供します。詳細: http://www.statmethods.net/stats/descriptives.html

于 2013-12-26T05:04:51.540 に答える
1

まず、R のバージョンによって異なります。2.11 を通過した場合は、複数の結果関数 (集計、インスタンスごと、または独自の関数) で集計を使用できます。そうでない場合は、ジャスティンの回答を使用できます。

于 2012-03-23T23:40:34.633 に答える