如何基于多个条件替换R中的变量?

时间:2019-06-30 19:45:47

标签: r

我有一列列出了年龄,并且我试图将年龄分为三个单独的值:年轻人,中年和老年人。

如果我执行嵌套ifelse,如:

df$age <- ifelse(df$age <= 40, "young",
   ifelse((df$age > 40) & (df$age < 65), "middle",
      ifelse(df$age >= 65, "senior, "")))

...然后将列中的所有值替换为“年轻”和“中间”,而没有“高级”。

如果我通过赋值分别替换值,如:

df$age[df$age <= 40] <- "young"
df$age[df$age > 40 & df$age < 65] <- "middle"
df$age[df$age >= 65] <- "senior"

...然后将列中的所有值替换为“高级”。

似乎将列中的整数替换为第一组字符后,它将整个列更改为字符类。我不确定是不是引起问题的原因,所以我尝试将as.integer放在函数周围,但结果是相同的。

如何解决此问题,以便对列中的变量进行正确标记?

2 个答案:

答案 0 :(得分:1)

有两种方式都只使用基数R。

样本数据:

set.seed(1234)    # Make the results reproducible
age <- sample(10:100, 10)

现在将数字分类。

i <- findInterval(age, c(0, 40, 65, Inf))
category <- c("young", "middle", "senior")[i]
data.frame(age, category)

另一种方式。

category2 <- cut(age, breaks = c(0, 40, 65, Inf), labels = c("young", "middle", "senior"))
data.frame(age, category2)
#   age category2
#1   37     young
#2   89    senior
#3   31     young
#4   18     young
#5   14     young
#6   47    middle
#7   25     young
#8   13     young
#9   79    senior
#10  88    senior

答案 1 :(得分:0)

进行第一次替换时,您会将列df$age强制为character。之后,运算符<>的工作方式有所不同。尝试改用新列age2

df$age2 <- NA_character_
df$age2 <- ifelse(df$age <= 40, "young",
   ifelse((df$age > 40) & (df$age < 65), "middle",
      ifelse(df$age >= 65, "senior, "")))