R中if-else中的逻辑运算符

时间:2013-06-13 11:30:17

标签: r math loops logical-operators

我有下表(5列和3行),名为mat:

AC CA RES
1   0  
2   2 
1   3 
0   0 
0   1

正在执行的操作是mat[1]/mat[1]+mat[2]

我正在测试以下内容: 1)如果一行的两列都为零,则结果应为NA。 2)如果一行中只有一列为零而另一列为非零数字,则继续计算。 (即使分子为0,也没关系)

我目前正在逐行中使用这个if-else结构:

if(mat[b,1]>=0|mat[b,2]>=0){mat[b,3]<-(mat[b,1]/(mat[b,1]+mat[b,2]));}
else{is.na(mat[b,3])=TRUE;}

我收到以下错误:

1: In Ops.factor(mat[b, 1], 0) : >= not meaningful for factors
2: In Ops.factor(mat[b, 2], 0) : >= not meaningful for factors

这样做有更顺畅的方法吗?

数字始终为整数,始终为0或更大。 我想使用apply,但如何直接将apply的结果分配到第3列?

1 个答案:

答案 0 :(得分:2)

要获得结果,您不需要for循环,只需使用ifelse()即可。如果数据框mat中的列是数字而不是因子(如评论中@Arun所指出的那样),这将有效。

mat$RES<-ifelse(mat[,1]==0 & mat[,2]==0,NA,mat[,1]/(mat[,1]+mat[,2]))

 mat
  AC CA  RES
1  1  0 1.00
2  2  2 0.50
3  1  3 0.25
4  0  0   NA
5  0  1 0.00