R 如何使用mutate和ifelse将数值变量转换为具有多个级别的因子变量

R 如何使用mutate和ifelse将数值变量转换为具有多个级别的因子变量,r,R,我很难从一个预先存在的数值变量中创建一个新的因子变量。我有一个数字变量年龄和我的参与者的年龄,但我想创建一个因子变量,将参与者的年龄划分为不同的类别。每当我运行代码时,都会出现一个错误: 错误:缺少参数“否”,没有默认值 我已经尝试了以下代码的不同变体,例如不带引号的新因子级别,使用:for ranges等。我的代码如下 data.frame%>% mutate(Age = ifelse(Age < 20, "0"), ifelse(Age >=

我很难从一个预先存在的数值变量中创建一个新的因子变量。我有一个数字变量年龄和我的参与者的年龄,但我想创建一个因子变量,将参与者的年龄划分为不同的类别。每当我运行代码时,都会出现一个错误:

错误:缺少参数“否”,没有默认值

我已经尝试了以下代码的不同变体,例如不带引号的新因子级别,使用:for ranges等。我的代码如下

data.frame%>%
    mutate(Age = ifelse(Age < 20, "0"),
           ifelse(Age >= 20 & Age <= 29, "1"),
                  ifelse(Age >=30 & Age <= 39, "2"),
                        ifelse(Age >= 40 & Age <=49, "3"),
                               ifelse(Age >= 50 & Age <= 59, "4"),
                                     ifelse(Age >= 60 & Age <= 69, "5"),
                                           ifelse(Age >= 70, "6", NA))
数据帧%>%
突变(年龄=ifelse(年龄<20,“0”),
ifelse(年龄>=20岁,年龄=30岁,年龄=40岁,年龄=50岁,年龄=60岁,年龄=70岁,“6”,不适用)
cut()
是最简单的方法

在R基中:

Age <- seq(10,80,by=10)
cut(Age,breaks=c(-Inf,seq(20,70,by=10),Inf),
        right=FALSE,
        labels=as.character(0:6))
结束括号“应放在所有
ifelse
的末尾:

df1 <- data.frame(Age=c(1:80,NA))

df1%>%
    mutate(Age_cat = factor(ifelse(Age < 20, "0",
           ifelse(Age >= 20 & Age <= 29, "1",
                  ifelse(Age >=30 & Age <= 39, "2",
                        ifelse(Age >= 40 & Age <=49, "3",
                               ifelse(Age >= 50 & Age <= 59, "4",
                                     ifelse(Age >= 60 & Age <= 69, "5",
                                           ifelse(Age >= 70, "6", NA)))))))))

另一件事:由于
case_的参数是按顺序计算的,所以我认为编写
$Age<20~“0”就足够了,$Age您在这两方面都是正确的。我更改了
TRUE~“6”
,但我将把它留给OP,以便将其更改为
$Age可能的重复项
df1 <- data.frame(Age=c(1:80,NA))

df1%>%
    mutate(Age_cat = factor(ifelse(Age < 20, "0",
           ifelse(Age >= 20 & Age <= 29, "1",
                  ifelse(Age >=30 & Age <= 39, "2",
                        ifelse(Age >= 40 & Age <=49, "3",
                               ifelse(Age >= 50 & Age <= 59, "4",
                                     ifelse(Age >= 60 & Age <= 69, "5",
                                           ifelse(Age >= 70, "6", NA)))))))))
df1 %>%
mutate(Age_cat= factor(case_when(
  .$Age <  20 ~ "0",
  .$Age >= 20 & .$Age <= 29 ~ "1",
  .$Age >= 30 & .$Age <= 39 ~"2",
  .$Age >= 40 & .$Age <=49 ~  "3",
  .$Age >= 50 & .$Age <= 59 ~ "4",
  .$Age >= 60 & .$Age <= 69 ~ "5",
  TRUE  ~"6"))
)
   Age Age_cat
1    1       0
2    2       0
3    3       0
4    4       0
5    5       0
...
13  13       0
14  14       0
15  15       0
16  16       0
17  17       0
18  18       0
19  19       0
20  20       1
21  21       1
22  22       1
23  23       1
24  24       1
...
79  79       6
80  80       6
81  NA    <NA>