0

重複の可能性:
ベクトルをインデックスで分割し、そのパーティションで操作を実行するための慣用的なRコード

特定の行についてのみ列の平均を取得する方法に 関連していますか?

「スコア」列を「ラウンド」列に基づいてセクションにスケーリングする新しい列をデータフレームに作成しようとしています。

Score     Quarter        
98.7      QTR 1 2011
88.6      QTR 1 2011
76.5      QTR 1 2011
93.5      QTR 2 2011
97.7      QTR 2 2011
89.1      QTR 1 2012 
79.4      QTR 1 2012
80.3      QTR 1 2012 

このようになります

Unit Score     Quarter         Scale        
 6    98.7      QTR 1 2011     1.01
 1    88.6      QTR 1 2011     .98 
 3    76.5      QTR 1 2011     .01
 5    93.5      QTR 2 2011     2.0
 6    88.6      QTR 2 2011     2.5
 9    89.1      QTR 1 2012     2.2
 1    79.4      QTR 1 2012     -.09
 3    80.3      QTR 1 2012     -.01
 3    98.7      QTR 1 2011     -2.2

データの傾向を把握し、ラウンドに関係なくすべてのポイントを相互に比較するscale(data $ Score)ではなく、四半期ごとにユニットがどのように相互に関連しているかを実際に確認したいので、列全体を標準化する必要はありません。

私はこのようなものの変形を試しました:

data$Score_Scale <-  with (data, scale(Score), findInterval(QTR, c(-Inf,"2011-01-01","2011-06-30", Inf)), FUN= scale)
4

1 に答える 1

1

ここで使用aveするのが良いオプションかもしれません:

データを取得します。

test <- read.csv(textConnection("Score,Quarter
98.7,Round 1 2011
88.6,Round 1 2011
76.5,Round 1 2011
93.5,Round 2 2011
97.7,Round 2 2011
89.1,Round 1 2012
79.4,Round 1 2012
80.3,Round 1 2012"),header=TRUE)

scaleQuarterグループ内のデータ:

test$score_scale <- ave(test$Score,test$Quarter,FUN=scale)
test

  Score      Quarter score_scale
1  98.7 Round 1 2011  0.96866054
2  88.6 Round 1 2011  0.05997898
3  76.5 Round 1 2011 -1.02863953
4  93.5 Round 2 2011 -0.70710678
5  97.7 Round 2 2011  0.70710678
6  89.1 Round 1 2012  1.15062301
7  79.4 Round 1 2012 -0.65927589
8  80.3 Round 1 2012 -0.49134712

これが機能することを明確にするために、各Quarterグループの個々の結果を次に示します。

> as.vector(scale(test$Score[test$Quarter=="Round 1 2011"]))
[1]  0.96866054  0.05997898 -1.02863953
> as.vector(scale(test$Score[test$Quarter=="Round 2 2011"]))
[1] -0.7071068  0.7071068
> as.vector(scale(test$Score[test$Quarter=="Round 1 2012"]))
[1]  1.1506230 -0.6592759 -0.4913471
于 2013-01-10T00:57:18.880 に答える