首页 > 解决方案 > ifelse 返回意外的值

问题描述

基本上,我想基于现有列创建一个新列。我希望仅在满足某些条件时才更改新列。

我在下面尝试了两种方法,但任何一种都有效 - 它返回一个数值而不是 FALSE 条件的现有列的​​值。我读了一些帖子,表明 ifelse 删除了列的属性,这可能会导致问题。

有人能帮我吗?谢谢!

顺便说一句,如果现有列是数字,它工作正常。

attach(iris)
library(dplyr)

# Approach 1
d1 = iris %>%
  mutate(s = ifelse(Species == "versicolor", "ver", Species))

View(d1)

# Approach 2
d2=iris
d2$s = ifelse(d2$Species == "versicolor", "ver", d2$Species)
View(d2)

标签: dplyr

解决方案


包含字符的列作为因子加载到 R 中,因此,如果您希望将它们作为对字符进行操作,则应将它们转换为字符:

attach(iris)
library(dplyr)

iris$Species <- as.character(iris$Species)

# Approach 1

d1 = iris %>%
  mutate(s = ifelse(Species == "versicolor", "ver", Species))

View(d1)

# Approach 2
d2=iris
d2$s = ifelse(d2$Species == "versicolor", "ver", d2$Species)
View(d2)

聚类和其他一些 ML 方法将需要相反的转换 - as.factor.


推荐阅读