2

3 段階のクラスター サンプリング用の関数を作成するコードを作成しようとしていますが、関数に何が入っているかを理解できるように、現在はダミー データを使用しているだけです。

for ループに取り組んでおり、グループ化された値を持つデータ フレームがあります。私はデータを持つデータフレームを持っています:

    Cluster group   value   value.K.bar  value.M.bar      N.bar
1       1       A   1        1.5            2.5             4
2       1       A   2        1.5            2.5             4
3       1       B   3        4.0            2.5             4
4       1       B   4        4.0            2.5             4
5       2       B   5        4.0            6.0             4
6       2       C   6        6.5            6.0             4
7       2       C   7        6.5            6.0             4

forループを実行しようとしています

n <- dim(data)[1]
e <- 0
total <- 0
for(i in 1:n) {e = data.y$value.M.bar[i] - data$N.bar[i]
               total = total + e^2} 

私の質問は次のとおりです。グループ内の一意の値に対して同じループを実行する方法はありますか? 言い方:

Group 'A', 'B', 'C'

どんな助けでも大歓迎です!

編集:正しい言語のために

4

1 に答える 1

4

byたとえば、グループごとにデータを適用するために使用できます。まず、データを入力として受け取る関数でコードをラップします。

get.total <- function(data){
  n <- dim(data)[1]
  e <- 0
  total <- 0
  for(i in 1:n) {
    e <- data$value.M.bar[i] - data$N.bar[i] ## I correct this line
    total <- total + e^2
  } 
  total
}

次に、グループ B と C の合計を計算するには、次のようにします。

    by(data,data$group,FUN=get.total)
data$group: A
[1] 4.5
---------------------------------------------------------------------------------------------------- 
data$group: B
[1] 8.5
---------------------------------------------------------------------------------------------------- 
data$group: C
[1] 8

しかし、より良い、ここにあなたの関数のベクトル化されたバージョンがあります

 by(data,data$group,
        function(dat)with(dat, sum((value.M.bar - N.bar)^2)))
于 2013-04-26T22:57:30.523 に答える