r - 检查两列的条件,如果为真,则操作 R 中的第三列
问题描述
我一直在寻找解决此问题的方法,但一直找不到。它与其他问题有些相似,所以如果这是重复的,我深表歉意。
我希望检查数据帧上的两个条件,当满足两个条件时更改第三列。举个例子可能更容易看出:
greetings <- c("Hello", "Howdy", "Hola")
df <- data.frame(
Criteria_1 = c("Hello", "Hello", "Goodbye", "Goodbye", "Hello"),
Criteria_2 = c("Yes", "No", "Yes", "No", "Yes"),
Change_col = c(1,5,6,9,3))
Criteria_1 Criteria_2 Change_col
1 Hello Yes 1
2 Hello No 5
3 Goodbye Yes 6
4 Goodbye No 9
5 Hello Yes 3
我想检查 Criteria_1 在变量“greeting”中是否有值,以及 Criteria_2 是否为“是”。当两者都为真时,我想将“Change_col”中的值更改为 10。
这是我尝试过的,但它将所有 Change_col 值更改为 10。
if(df$Criteria_1 %in% greetings & df$Criteria_2 == 'Yes'){
df$Change_col <- '10'
我想我可能必须使用 apply 功能?但不确定如何做到这一点。所需的输出将是这样的:
Criteria_1 Criteria_2 Change_col
1 Hello Yes 10
2 Hello No 5
3 Goodbye Yes 6
4 Goodbye No 9
5 Hello Yes 10
解决方案
我认为dplyr::mutate
,该ifelse()
声明提供了一个很好的解决方案。您是否尝试过以下操作?
library(tidyverse)
newDf <- df %>%
mutate(Change_col = ifelse(Criteria_1 %in% greetings & Criteria_2 == "Yes", 10, Change_col))
推荐阅读
- stripe-payments - 条纹发票支付成功事件
- powershell - Powershell:Get-MsalToken 错误 AADSTS7000218
- r - R循环中的两个变量
- android - 取消自定义 CoroutineScope
- android - Okta 重定向不起作用 android 发布版本
- kubernetes - Jenkins X 导入 spring boot 应用程序,crashloopbackoff 错误越来越
- c++ - QtCreator 部署不同版本库
- google-apps-script - 自动日期戳的冲突脚本 - 我有一个脚本可以根据 S 列的值(字母顺序)自动对行进行分组
- javascript - 如何将具有父子关系的嵌套数组转换为普通数组?
- java - 从 JPA 调用 Postgres 存储过程时不起作用。它没有插入