检查两列的条件,如果为true,则操纵R中的第三列

时间:2019-05-14 19:43:20

标签: r dataframe if-statement apply

我一直在寻找解决此问题的方法,但是找不到。它与其他问题有些相似,因此,如果这是重复的,我表示歉意。

我希望检查数据框上的两个条件,并且当两个条件都满足时,请更改第三列。通过示例可能更容易看到:

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是否为'Yes'。当两个都成立时,我想将“ 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

2 个答案:

答案 0 :(得分:1)

我们可以使用逻辑表达式将“ Change_col”中的值更改为10

df$Change_col[with(df, Criteria_1 %in% greetings & Criteria_2 == "Yes")] <- 10
df
#  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

答案 1 :(得分:1)

我认为dplyr::mutateifelse()语句提供了一个不错的解决方案。您尝试过以下吗?

library(tidyverse)

newDf <- df %>%
   mutate(Change_col = ifelse(Criteria_1 %in% greetings & Criteria_2 == "Yes", 10, Change_col))