使用 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
我正在尝试使用 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