r - 如何使用 IF 函数更新数据框中的列?
问题描述
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
我们可以case_when
从dplyr
包中使用。Mutate
更改列X0
并X1
取决于 dencase_when
条件。
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
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
推荐阅读
- swift - 如何使用 AVPlayer (macOS) 循环播放视频?
- php - Doctrine 的 PreUpdate 生命周期回调更新所有加载的实体,而不仅仅是更新的实体
- java - Springboot:如何在任何类型失败的情况下覆盖默认的 JSON 响应结构?
- vim - 如何在 Vim coc-java 中转到父类
- python-3.x - Python Wand 缺少库/路径
- c# - 注册表测试注册表项值 - C# Visual Studio 2019
- database - 什么是数据库中的主要、次要和任意复制
- xml - odoo 14 销售点收据定制
- javascript - 使用 mongoDB 10000 毫秒后,GraphQL 端点缓冲超时
- c# - 从 div 和 class 中获取价值