【问题标题】:Checking a condition on two columns and if true manipulate a 3rd column in R检查两列的条件,如果为真,则操作 R 中的第三列
【发布时间】:2019-05-14 19:43:20
【问题描述】:

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

我希望检查数据帧上的两个条件,并在满足两个条件时更改第三列。举个例子可能更容易看出:

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

【问题讨论】:

  • 尝试使用ifelse 而不是if
  • 如果我在“否”参数中什么都没有怎么办?
  • 您的原始值将在无参数中。

标签: r dataframe if-statement apply


【解决方案1】:

我认为dplyr::mutateifelse() 语句提供了一个很好的解决方案。您是否尝试过以下方法?

library(tidyverse)

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

【讨论】:

    【解决方案2】:

    我们可以使用逻辑表达式将 '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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      相关资源
      最近更新 更多