2

我有一个名为 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到第三列?

4

1 回答 1

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
于 2013-06-13T11:46:05.893 回答