使用 ifelse() 函数在我的数据集中重新编码年龄变量

Recode age variable in my dataset using ifelse() function

我正在尝试使用 ifelse() 函数将数据集中的年龄列重新编码为三个大小大致相等的组,分别是“年轻”、“中等”和“年老”。我可能做错了什么或遗漏了什么。

我真正想做的是给 28 岁以下的每个年龄组起名为“年轻”,然后我想给 28 到 53 岁之间的每个年龄组起“中”这个名字,以及以上的所有年龄组53应该叫“老”。这是我尝试使用的代码,但它只是将年龄列转换为一个名称,在本例中为“中间”。

PU6_exercise_data$age <- ifelse(PU6_exercise_data$age > 28, "middle", "young")
PU6_exercise_data$age <- ifelse(PU6_exercise_data$age > 53, "old", "middle")

似乎 case_when() 在这里更好。您必须决定 = 运算符的位置,即 28 岁 'young' 或 'middle'?

age <-  data.frame(age = c(15, 29, 54, 53, 28))
age %>%
  mutate(age_bracket = case_when(age >= 28 & age < 53 ~ "middle",
                                 age < 28 ~ "young",
                                 age >= 53 ~ "old"))
    

问题在于,在第一行中,您将年龄列更改为仅包含“中等”或“年轻”的字符。这意味着当您尝试在第二行中检查年龄时,您实际上是在尝试检查“中间”或“年轻”是否 > 53,这是行不通的。

您可以按照 jpenzer 的建议使用 dplyr 包中的 case_when() 或使用您的年龄组创建第二列,而不是尝试更新年龄列本身。

df <- data.frame(age = seq(1, 100, 25))
df$age_group <- ifelse(df$age < 28, "young", "middle")
df$age_group <- ifelse(df$age > 53, "old", df$age_group)
df
  age age_group
1   1     young
2  26     young
3  51    middle
4  76       old