4

各要素の「ペソ」の値をテストする必要があります (以下の複製コードを参照)。因子が「ペソ」の全体合計の 50% に達するかどうか、各因子の値を新しいオブジェクト「結果」に貼り付ける必要があります。それ以外の場合、R は「ペソ」の集計値が最も低い因子を評価し、検討する必要があります。集計「ペソ」の次の列の係数をもう一度。基本的に、このプロセスは、スコアが最も低い因子を次の因子に置き換えます。要因が 50% のしきい値を超えるまで、このプロセスを繰り返す必要があります。だから私の質問は、どこから始めればいいですか?

set.seed(51)
Data <- sapply(1:100, function(x) sample(1:10, size=5))
Data <- data.frame(t(Data))
names(Data) <- letters[1:5]
Data$peso <- sample(0:3.5, 100, rep=TRUE) 

次のようになるはずです

If your first two rows are: 
  a  b  c  d  e peso
  8  2  3  7  9    1
  8  3  4  5  7    3
  9  7  4 10  1    2
 10  3  4  5  7    3   

What would you like for the total?  
      Totals_08  = 4
      Totals_09  = 2
      Totals_10  = 3
      etc?

したがって、因子 8 はより大きなシェア 4/(4+2+3) = 0.4444444 を得ましたが、ラウンド a で 50% のしきい値に達しませんでした。したがって、さらに何かが必要です。集計を繰り返しますが、最初のラウンドで最も低い集計値を取得したため、列 'a' の係数 9 ではなく、列 'b' の係数 7 を考慮します。

4

1 に答える 1

1

要因のリストが既にあるかどうかは不明です。持っておらず、データセットから取得している場合は、いくつかの方法で取得できます。

# Get a list of all the factors
myFactors <- levels(Data[[1]])  # If actual factors.
myFactors <-   sort(unique(unlist(Data)))  # Otherwise use similar to this line


次に、因子ごとの合計を計算するには、次のようにします。

Totals <- 
 colSums(sapply(myFactors, function(fctr) 
     # calculate totals per fctr
     as.integer(Data$peso) * rowSums(fctr == subset(Data, select= -peso)) 
   ))

names(Totals) <- myFactors

どちらが与える

Totals
#    1   2   3   4   5   6   7   8   9  10 
#  132 153 142 122 103 135 118 144 148 128 



次へ: その後、ペソの合計と比較したいのか、合計の合計と比較したいのかわかりません。以下に、両方のオプションをステップに分けて示します。

# Calculate the total of all the Totals:
TotalSum <- sum(Totals)

# See percentage for each:
Totals / TotalSum
Totals / sum(as.integer(Data$peso))

# See which, if any, is greater than 50%
Totals / TotalSum > 0.50
Totals / sum(as.integer(Data$peso)) > 0.50

# Using Which to identify the ones you are looking for
which(Totals / TotalSum > 0.50)
which(Totals / sum(as.integer(Data$peso)) > 0.50)



ペソのサンプリングに関する注意事項

のサンプルを取得しましたが0:3.5x:yシーケンスは整数のみを提供します。分数が必要な場合は、使用するseq()か、より大きなシーケンスを取得してから適切に分割できます。

option1 <-  (0:7) / 2
option2 <-  seq(from=0, to=3.5, by=0.5)

0:3 の整数全体と値 3.5 が必要な場合は、c() を使用します。

 option3 <- c(0:3, 3.5)
于 2012-11-16T05:21:29.610 に答える