了解ifelse的工作原理

时间:2018-09-06 00:11:47

标签: r

您好,我是R的新手,希望您的帮助。我有一个数据框,我想重新编码一些值。这是一个示例数据框:

df <- data.frame(age = sample(100, size = 6),
                 gender = c("boy", "girl"))
print(x)
      age gender
    1  58    boy
    2  41   girl
    3  31    boy
    4  96   girl
    5  93    boy
    6  60   girl

比方说,我想在一个名为new.gender的新列中将男孩和男人重新编码为女孩。我尝试使用ifelse函数(无济于事):

df$new.gender <- NA
ifelse(x$gender == "boy", x$new.gender <- "man", x$new.gender <- "woman")
print(x)
  age gender new.gender
1  96    boy      woman
2  46   girl      woman
3  68    boy      woman
4   6   girl      woman
5  26    boy      woman
6  55   girl      woman

经过一番思考,我对语法进行了一些更改,使其生效:

x$new.gender <- NA
x$new.gender <- ifelse(x$gender == "boy", "man", "woman")
print(x)
  age gender new.gender
1  96    boy        man
2  46   girl      woman
3  68    boy        man
4   6   girl      woman
5  26    boy        man
6  55   girl      woman

有人能帮助我理解为什么我的第一次尝试导致所有价值观都转变为女性,而我的第二次尝试有效吗?谢谢!

2 个答案:

答案 0 :(得分:1)

1返回等于测试长度的向量。

在您的情况下,完整列的分配执行了ifelse(test, yes, no)次。最终结果取决于上一次测试(nrow(x),错误),这说明了为什么您在该列中看到一排女性。

答案 1 :(得分:0)

作为R中的一般规则,您不要在函数中使用<-赋值运算符。