我有一个类似于这样创建的数据框:
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 是所有这些值中的最大值行(在 dummy$Xmax 列中定义),n 是选择的列数(在示例的情况下:n=10)。在实际数据集中,我将选择 26 列。
我想创建一个整洁的小函数来执行此计算并将每一行的值存储到一个名为 dummy$TSP 的列中,并对所有 13000 行执行此操作。
下面是一个粗略的解决方案,但就像我说的那样,我想把它引入某种整洁的功能,在那里我可以选择列,其余的(几乎)是自动的。
dummy$TSP<- ((((1-(dummy$X1/dummy$Xmax))/(10-1))
+(((1-(dummy$X2/dummy$Xmax))/(10-1))
...
+(((1-(dummy$X10/dummy$Xmax))/(10-1)))
我也非常感谢能够很好地解释该过程的答案,因此我将更有可能学习,在此先感谢!