我有一列列出了年龄,并且我试图将年龄分为三个单独的值:年轻人,中年和老年人。
如果我执行嵌套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放在函数周围,但结果是相同的。
如何解决此问题,以便对列中的变量进行正确标记?
答案 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, "")))