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