我如何处理Ifelse条件,该条件没有给我一个错误,但也没有给我输出任何变化?

问题描述 投票:1回答:2

我一直在使用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中的条件完全不匹配,那么我不想更改列中的值(即我希望它们按原样)。我该怎么办?

r kaggle
2个回答
1
投票

尝试逻辑索引。

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

另外,像用户Dan Y在对问题的评论中所说,在这里重复,因为有时评论被删除,

使用ifelse而不是if因为前者是矢量化的。

仍然使用如上定义的ifelseinx解决方案可能是

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

我使用inx来避免更长的代码行。如果您愿意,可以将inx的定义放在ifelse的索引中。


0
投票

你应该使用ifelse,这是一个矢量化的形式,你会做你想要的:

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

另外,要小心difference between & and &&

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

© www.soinside.com 2019 - 2024. All rights reserved.