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

标签 r math loops logical-operators

我有一个名为 mat 的下表(5 列和 3 行):

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

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

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

我目前正在 for 循环中按行使用此 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 的结果直接分配到第三列?

最佳答案

要获得结果,您不需要 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

关于r - R 中 if-else 中的逻辑运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17085994/

相关文章:

r - 在 shapefile 内创建网格

algorithm - 如何从任意大的任意基数转换为另一个

c++ - 不规则形状的区域

javascript - 分配从对象列表生成的标签值列表

R 中基于规则的条件格式 (openxlsx)

mysql - r 从 mysql db 循环中获取数据

r - 比较 R 中的 3 个列列表

C编程元素数组到sprintf()

r - 组织 R 源代码

java - 获取线和形状的交点