我该如何处理Ifelse条件,该条件既没有给我带来错误,也没有给我输出任何变化?

时间:2018-08-30 21:19:36

标签: r kaggle

我一直在使用Kaggle的Titanic数据集。我一直在尝试使用ifelse条件来进行某些要素工程工作,但是不幸的是,我对if else条件感到震惊,因为它不会产生错误,但同时根本无法正常工作。我在做什么错,我该如何处理? 这是我的代码:

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 

这是因为我遗漏了其他条件吗?

问题是,如果if else中的条件根本不匹配,那么我就不想更改列中的值(即,我希望它们保持原样)。 我该怎么办?

2 个答案:

答案 0 :(得分:1)

尝试逻辑索引。

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

,例如用户Dan Y在对该问题的评论中说过,此处重复是因为有时删除了评论,

  

使用ifelse代替if,因为前者是矢量化的。

仍然可以使用上面定义的ifelse的{​​{1}}解决方案

inx

我正在使用train$titles[inx] <- ifelse(train$sex[inx] == "male", "Mr", "Mrs") 来避免更长的代码行。如果愿意,可以将inx的定义放在inx的索引中。

答案 1 :(得分:0)

您可能应该使用ifelse,它是矢量形式,可以执行您想要的操作:

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

还要注意difference between & and &&

如果有多个案例,则可以嵌套多个ifelse语句。您可能也对dplyr::case_when感兴趣。