我有一个名为 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/