我一直在使用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中的条件根本不匹配,那么我就不想更改列中的值(即,我希望它们保持原样)。 我该怎么办?
答案 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
感兴趣。