我想比较不同行中的不同单元格并在满足条件时返回一个值。
假设以下 s_i
=
[,1] [,2] [,3]
[1,] 0.43020494 0.7183179 0.4201009
[2,] 0.08625491 0.3007912 0.8768459
[3,] 0.80012649 0.8448729 0.7131344
我想比较所有的行(对),所以第 1,2 行;1,3;2,3; 2,1; 3,1 和行 3,2 输出dgpos
包含合并的行号和返回的值。
我想比较行。第一行或第 1 行和第 2 行
1, if 2b≥1b
0, if 1a≥2c
(1a-2c )/ ((2b-2c) –(1b-1a), otherwise
其中 a、b 和 c 是 s_i 的列
在第 1 行和第 2 行的 R-ish
If (s_i[2,2]>= s_i[1,2])
dgpos[rowindex,3]=1
If (s_i[1,1]>= s_i[2,3])
dgpos[rowindex,3]=0
else (otherwise)
dgpos[rowindex,3] =(s_i[1,1]- s_i[2,3])/((s_i[2,2]-s_i[2,3])-(s_i[1,2]-s_i[1,1]))
我想要瞄准的输出包含组合和返回的值dgpos[,3]
[,1] [,2] [,3]
[1,] 1 2 0.5168453
[2,] 1 3 1
[3,] 2 3 1
[4,] 2 1 1
[5,] 3 1 0
[6,] 3 2 0.1235813
我有这个:
s_i=matrix(runif(9),3)
dgpos=matrix(0,(dim(s_i)[2]*(dim(s_i)[2]-1)),3)
rowindex=1
for (i in 1:nrow(s_i)) {
for (j in 1:nrow(s_i)) {
if (i!=j)
c1=s_i[i,]
c2=s_i[j+1,]
dgpos[rowindex,1]=i
dgpos[rowindex,2]=j+1
if (c2[2] >= c1[2])
dgpos[rowindex,3]=1
dgpos[rowindex,3] = ifelse ((c1[1]=c2[3]), 0 , c1[1]-c2[3]/((c2[2]-c2[3])-(c1[2]-c1[1])))
rowindex=rowindex+1
}
}
我知道循环不是首选,但目前(我的 r-ish 水平)我不知道更好的解决方案。我试过adply
了combn
,没有结果。
MQ:如何比较不同行中的不同单元格并根据几个条件返回一个值?
感谢您的帮助和赞扬。