ifelse在具有多个条件和多个动作的逻辑矩阵上

时间:2013-12-05 07:12:23

标签: r if-statement

我已经看到使用ifelse处理向量的解决方案。我有更多细节需要在我的案例中解决。虽然我正在努力找出不同的方法来处理它,通过声明yes和no条件的函数并在ifelse中使用它或尝试使用嵌套的ifelse循环,我不知道我错过了什么,因为我没有得到我需要的结果。所以我带来了所有的R专家。感谢您抽出宝贵时间帮助我。

我的输入数据

two.mz=57   
two.rt=16


x.mz

0       57      0   0   0   
2   0   0.00000 0   0   0   
3   0   0.00000 0   0   0   
4   0   0.00000 0   0   0   
5   0   0.00000 0   0   0   
6   0   0.00000 0   0   0   
7   0   0.00000 0   0   0   
8   0   0.00000 0   0   0   
9   0   0.00000 0   0   0   

y.rt   
0   16  0   0   0   
2   0   0.00000 0   0   0   
3   0   0.00000 0   0   0   
4   0   0.00000 0   0   0   
5   0   0.00000 0   0   0   
6   0   0.00000 0   0   0   
7   0   0.00000 0   0   0   
8   0   0.00000 0   0   0   
9   0   0.00000 0   0   0  



mz.test        
2   TRUE       
3   FALSE   
4   FALSE   
5   FALSE   
6   FALSE  
7   FALSE  
8   FALSE  
9   FALSE  
10  FALSE

rt.test也是一个逻辑矩阵。 mz.test和rt.test将具有相同的维度。

我需要检查一个简单的条件:如果mz.test是T并且rt.test在相应的行中也是T,则执行一组操作。如果它们在两个矩阵 *中的所有相应行中都不是 * 都为TRUE ,则在主矩阵中插入一行值。我使用此函数进行插入:

insert.under.row.number <- function (mat, rnum, what) 
{    
   if (length(what) != ncol(mat)) what <- c(0,what, rep_len(NA, ncol(mat) - length(what)))    
   rbind(mat[1:(rnum-1), ], what,mat[(rnum + 1):nrow(mat), ])   
}

我也从这个网站获得了这部分的帮助。 :)

我的代码段:

if (mz.test==T & rt.test==T)
{
  count=count+1
  x.mz[j,2]=two.mz  ##x.mz is a main matrix  ###two.mz and two.rt are single numeric values
  y.rt[j,2]=two.rt  ##y.rt is another main matrix
} else {
  count1=count1+1
  newrow.m=two.mz
  newrow.r=two.rt 
  x.mz <- insert.under.row.number(x.mz, j,newrow.m)
  row.names(x.mz) <- 1:nrow(x.mz1)
  y.rt <- insert.under.row.number(y.rt, j,newrow.r)
  row.names(y.rt) <- 1:nrow(y.rt1)
  print(count1)
}

我在这里展示了if()因为我没有为ifelse()获得正确的结构。任何人都可以帮我解决我的错误吗?非常感谢!

0 个答案:

没有答案