0

これが作成するものに似たデータフレームがあります:

dummy=data.frame(c(1,2,3,4),c("a","b","c","d"));colnames(dummy)=c("Num","Let")
dummy$X1=rnorm(4,35,6)
dummy$X2=rnorm(4,35,6)
dummy$X3=rnorm(4,35,6)
dummy$X4=rnorm(4,35,6)
dummy$X5=rnorm(4,35,6)
dummy$X6=rnorm(4,35,6)
dummy$X7=rnorm(4,35,6)
dummy$X8=rnorm(4,35,6)
dummy$X9=rnorm(4,35,6)
dummy$X10=rnorm(4,35,6)
dummy$Xmax=apply(dummy[3:12],1,max)

実物だけざっくり260×13000セル

私が目指しているのは、data[x:x] で定義された一連の列の各行に以下の式を実装することです (例では、列のダミー [3:12] 内のもの)。

TSP = Sum( (1-(Xi/Xmax)) /(n-1))

ここで、Xi は対象の行内および列内の個々の値です ( iは各列を意味します。つまり、各行に X1、X2、X3... の値があります)。Xmax は、行 (dummmy$Xmax 列で定義)、n は選択された列の数です (例の場合: n=10)。実際のデータ セットでは、26 列を選択します。

この計算を実行し、各行の値を dummy$TSP という列に格納し、13000 行すべてに対して行う、きちんとした小さな関数を作成したいと思います。

1つの大まかな解決策は次のとおりですが、私が言ったように、これをある種のきちんとした関数に入れたいと思います。そこでは、列を選択でき、残りは(ほぼ)自動です。

dummy$TSP<- ((((1-(dummy$X1/dummy$Xmax))/(10-1))
            +(((1-(dummy$X2/dummy$Xmax))/(10-1))
                       ...
            +(((1-(dummy$X10/dummy$Xmax))/(10-1)))

プロセスをよく説明する回答も本当にありがたいので、事前に感謝します!

4

2 に答える 2

1

よりベクトル化されたソリューションは、すべての要素に対して内部関数を実行してから、次のような効率的な関数sumを使用して各行の操作を実行することです。rowSums

vars.to.use <- paste0("X", 1:10)
dummy$TSP <- rowSums((1-(dummy[vars.to.use]/dummy$Xmax))/(length(vars.to.use) - 1))
于 2013-03-22T17:36:25.880 に答える