predict <- read.table(header=TRUE, text="
0 1
0.44 0.55
0.76 0.24
0.71 0.29
0.75 0.24
0.25 0.75
")
我附上了一个示例数据框,其中包含 2 列,标题为“0”和“1”。我想使用一个 IF 函数,这样如果 0 列中的值大于 0.7,单元格就会更新为其中有一个 0 值。此外,如果“1”列中的值大于 0.7,则单元格更新为其中包含 1 值。最后,如果“0”或“1”值都不大于 0.7,我希望单元格返回 -99。我附上了一个示例,说明在应用此 IF 函数后我的样本会是什么样子。
predict <- read.table(header=TRUE, text="
0 1
-99 -99
0 0.24
0 0.29
0 0.24
0.25 1
")
我尝试过的代码是;
if(predict[,1] > 0.7 ){predict[,1] == '0' }
if(predict[,1] > 0.7 ){predict[,2] == '1' }
如果您能就更新此 IF 函数的最佳方式向我提出建议,我们将不胜感激。
最佳答案
更新
基于 AniGoyal 的干预(非常感谢!!!) 我更新了答案以满足 OP 的确切期望输出: 我将两个答案组合在一个代码中以获得所需的输出:
代码:
predict %>%
as_tibble %>%
mutate(a = case_when(X0 > 0.7 ~ 0,
TRUE ~ ifelse(X0 < 0.7 & X1 < 0.7, -99, X0)),
b = case_when(X1 > 0.7 ~ 1,
TRUE ~ ifelse(X1 < 0.7 & X0 < 0.7, -99, X1))
) %>%
select(X0 = a, X1=b)
输出:
X0 X1
<dbl> <dbl>
1 -99 -99
2 0 0.24
3 0 0.290
4 0 0.24
5 0.25 1
我们可以使用 dplyr
包中的 case_when
。 Mutate
根据 den case_when
条件更改列 X0
和 X1
。
library(dplyr)
predict %>%
mutate(X0 = case_when(X0 > 0.7 ~ 0,
TRUE ~ -99),
X1 = case_when(X1 > 0.7 ~ 1,
TRUE ~ -99)
)
输出:
X0 X1
1 -99 -99
2 0 -99
3 0 -99
4 0 -99
5 -99 1
ifelse
或者我们可以使用ifelse
https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/ifelse
predict$X0 <- ifelse(predict$X0 > 0.7, 0, -99)
predict$X1 <- ifelse(predict$X1 > 0.7, 1, -99)
predict
https://stackoverflow.com/questions/66932266/