我正在处理一些诊断测试数据。这是一个小样本:
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执行此操作?
答案 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