如果满足条件,则将数字添加到行

时间:2019-06-03 15:21:53

标签: r dplyr

我正在处理一些诊断测试数据。这是一个小样本:

tibble::tribble(
     ~TP, ~FN, ~FP, ~TN,
      37,   5,  49,  10,
      28,   3,   0,  27,
       0,  18,  12, 106,
      18,   0,   0,  40,
      18,   0,  10,  30
     )

一些诊断测试的计数为0。在计数为0的测试中,我想对所有单元格计数加0.5。这是我想要的输出

tibble::tribble(
     ~TP, ~FN, ~FP, ~TN,
      37,   5,  49,  10,
      28.5,   3.5,   0.5,  27.5,
      0.5,  18.5,  12.5, 106.5,
      18.5,   0.5,   0.5,  40.5,
      18.5,   0.5,  10.5,  30.5
     )

请注意,第一行没有更改,因为所有计数都大于0。但是,由于每一行中至少有一个零,因此其余每一行都发生了更改。

我如何使用dplyr执行此操作?

1 个答案:

答案 0 :(得分:1)

您可以使用apply并检查0。

t(apply(df,1,function(x) if(0 %in% x) return(x+0.5) else return(x)))

或者如果我们坚持使用dplyr,

a%>%
  t()%>%
  data.frame(check.names = F) %>%
  rownames_to_column()%>%
  mutate_if(function(col) any(0 %in% col),function(col) col+0.5)%>%
  column_to_rownames()%>%
  t()%>%
  data.frame()

在R底下一些事情变得更容易。

 TP   FN   FP    TN
[1,] 37.0  5.0 49.0  10.0
[2,] 28.5  3.5  0.5  27.5
[3,]  0.5 18.5 12.5 106.5
[4,] 18.5  0.5  0.5  40.5
[5,] 18.5  0.5 10.5  30.5