3

各参加者のグループIDを含む列が1つあります。3つのグループがあるため、この列のすべての数値は1、2、または3です。

次に、各参加者の応答スコアを含む2番目の列があります。各グループ内の平均/中央値応答スコアを計算したいと思います。

私はすべての行をループすることでこれを行うことができましたが、これは遅くて最適ではないソリューションだと感じています。誰かが物事を行うためのより良い方法を提案してもらえますか?

4

3 に答える 3

3

grpstats使用するのに適した機能です(ドキュメントはこちら

これは埋め込み統計のリストです。

  • 意味する
  • 'sem' 平均の標準誤差
  • 'numel' 非 NaN 要素のカウントまたは数
  • 'gname' グループ名
  • 'std' 標準偏差
  • 'var' 分散
  • 'min' 最小
  • 'max' 最大
  • '範囲' 範囲
  • 'meanci' 平均の 95% 信頼区間
  • 'predci' 新しい観測値の 95% 予測区間

また、関数ハンドルも受け入れます (例: @mean@skeweness)

>> groups = [1 1 1 2 2 2 3 3 3]';
>> data   = [0 0 1 0 1 1 1 1 1]';
>> grpstats(data, groups, {'mean'})
ans =

    0.3333
    0.6667
    1.0000

>> [mea, med] = grpstats(data, groups, {'mean', @median})

mea =

    0.3333
    0.6667
    1.0000


med =

     0
     1
     1
于 2013-10-10T12:46:30.133 に答える
2

これは使用するのに適した場所ですaccumarray(ドキュメントブログ投稿):

result = accumarray(groupIDs, data, [], @median);

もちろん、変数と呼ばれる変数の代わりに、行列の行または列を指定できgroupIDsますdata。中央値ではなく平均値を使用する場合@meanは、4 番目の引数として使用します。


注: ドキュメントには、出力の順序に依存する必要がある場合は、入力パラメーターを並べ替える必要があることが記載されています。しかし、私はその練習を別の日に残します.

于 2013-01-22T12:14:04.020 に答える
1

論理条件を使用します。たとえば、データがm次のようにマトリックス内にあるとします。最初の列はID2番目の列は応答スコア、

mean(m(m(:,1)==1,2))
median(m(m(:,1)==1,2))

1応答スコアなどの平均と中央値が表示されます

于 2013-01-22T10:17:34.060 に答える