[英]Convert multiple dummy/logical variables into a single categorical variable in R dplyr
[英]How do convert a categorical variable into multiple dummy variables in R?
在这里,我有一个列名为 Age = (24 或以下、25 到 34、35 到 44、45 到 54、25 到 34、24 或以下、35 到 44、25 到 34、45 到 54) 的数据集
现在我需要将分类变量“Age”的值转换如下:24 或以下等于 1、25 到 34 等于 2、35 到 44 等于 3、45 到 54 等于 4
有人能帮我一下吗?
提前谢谢了。
您可以使用嵌套ifelse
语句:
set.seed(12)
df <- data.frame(Age = c(sample(c("24 or under", "25 to 34", "35 to 44", "45 to 54"), 20, replace = T)))
df$Age_new <- ifelse(df$Age == "24 or under", 1,
ifelse(df$Age == "25 to 34", 2,
ifelse(df$Age == "35 to 44", 3, 4)))
结果:
df
Age Age_new
1 25 to 34 2
2 35 to 44 3
3 24 or under 1
4 45 to 54 4
5 24 or under 1
6 35 to 44 3
7 45 to 54 4
8 25 to 34 2
9 45 to 54 4
10 35 to 44 3
11 24 or under 1
12 35 to 44 3
13 25 to 34 2
14 24 or under 1
15 25 to 34 2
16 35 to 44 3
17 25 to 34 2
18 25 to 34 2
19 35 to 44 3
20 25 to 34 2
正如pieterbons所描述的,您的 Age 字段实际上已经是一个因素。 如果您将 Age 转换为数字类型,您将拥有数字类别中的数据。
df <- data.frame(Age = c("24 or under", "25 to 34", "35 to 44", "45 to 54"))
df$Age <- as.numeric(df$Age)
您还可以按照您的描述使用 Age 字段的虚拟代码创建一个新字段(如果您有一个要转换为因子但顺序非常不同的字符串变量,此选项将特别有用),有多个方法:
# 1) Base R
df$age_new <- as.numeric(df$Age)
# 2) dplyr
library(dplyr)
df <- df %>%
mutate(Age = case_when(Age == "24 or under" ~ 1,
Age == "25 to 34" ~ 2,
Age == "35 to 44" ~ 3,
TRUE ~ 4))
#> df
# Age age_new
#1 24 or under 1
#2 25 to 34 2
#3 35 to 44 3
#4 45 to 54 4
如果您的列 Age 是一个因素,这实际上会自动发生在屏幕后面(每个值都存储为 integer 并具有相应的文本标签)。 要显式获取这些整数,您可以使用as.numeric()
。
df <- data.frame(Age = c("24 or under", "25 to 34", "35 to 44", "45 to 54"))
df$Age_cat <- as.numeric(df$Age)
如果级别的顺序与原始顺序不同,您可能会遇到排序问题。 在这种情况下,您可以明确设置因子的水平。
如果您想要一个虚拟变量(即 0 或 1),您可以使用dplyr::if_else
语句为每个类别创建一个新变量:
library(dplyr)
Age = c("24 or under", "25 to 34", "35 to 44", "45 to 54")
data.frame(age = Age) %>%
mutate("24 or under" = if_else(age == Age[1], 1, 0),
"25 to 34" = if_else(age == Age[2], 1, 0),
"35 to 44" = if_else(age == Age[3], 1, 0),
"45 to 54" = if_else(age == Age[4], 1, 0))
如果您想要一个数值,请将您的变量编码为factor
,按您想要的顺序设置级别,然后使用as.numeric
:
Age = factor(c("24 or under", "25 to 34", "35 to 44", "45 to 54"),
levels = c(c("24 or under", "25 to 34", "35 to 44", "45 to 54")))
as.numeric(Age)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.