代码之家  ›  专栏  ›  技术社区  ›  AdeeThyag

如何处理Ifelse条件,它既不会给我一个错误,也不会给我的输出带来任何变化?

  •  1
  • AdeeThyag  · 技术社区  · 6 年前

    我一直在使用卡格尔的泰坦尼克号数据集。我一直试图使用一个ifelse条件,目的是做一些功能工程工作,但不幸的是,我被我的ifelse条件击中了,它没有产生错误,但同时根本不起作用。我做错了什么?我该怎么处理? 这是我的密码:

    if(train$titles=="Dr" && train$Sex=="male"){
      train$titles<-"Mr"
    }else if(train$titles=="Dr" && train$Sex=="female"){
      train$titles<-"Mrs"
    }
    

    这是我的输出,前后相同:

    > table(train$titles)
    
      Mr  Mrs   Dr Miss 
     571  128    7  185 
    

    这是因为我遗漏了最后的条件吗?

    我该怎么办?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Rui Barradas    6 年前

    尝试逻辑索引。

    inx <- train$titles == "Dr"
    train$titles[inx & train$sex == "male"] <- "Mr"
    train$titles[inx & train$sex == "female"] <- "Mrs"
    

    也, Dan Y 在对问题的评论中说,这里重复,因为有时评论会被删除,

    A ifelse inx 如上所述

    train$titles[inx] <- ifelse(train$sex[inx] == "male", "Mr", "Mrs")
    

    因克斯 以避免代码行过长。你可以把 因克斯 如果你愿意的话。

        2
  •  0
  •   mikeck    6 年前

    你应该用 ifelse

    train$titles = ifelse(train$titles=="Dr" & train$Sex=="male", "Mr", "Mrs")
    

    另外,要当心 difference between & and && .

    如果有多个案例,可以嵌套多个 如果不是 声明。你也可能对 dplyr::case_when .