首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将变量中的原始值保留为一个因素?

如何将变量中的原始值保留为一个因素?
EN

Stack Overflow用户
提问于 2016-09-29 20:45:36
回答 1查看 1.2K关注 0票数 4

下面是一些工作代码来说明我的问题:

代码语言:javascript
复制
# Categorical variable recorded as numeric (integer)
df1 <- data.frame(group = c(1, 2, 3, 9, 3, 2, 9, 1, 9, 3, 2))

我有一个作为整数值记录的分类变量(group)。对于图,并将此变量包含在模型中,将其编码为因子,将每个数字映射到描述类别的标签上是有用的。所以我认为一个因素是:

代码语言:javascript
复制
# Make it a factor
df1$group_f <- factor(x = df1$group, 
                      levels = c(1, 2, 3, 9), 
                      labels = c("G1", "G2", "G3", "Unknown"))

df1
   group group_f
1      1      G1
2      2      G2
3      3      G3
4      9 Unknown
5      3      G3
6      2      G2
7      9 Unknown
8      1      G1
9      9 Unknown
10     3      G3
11     2      G2

现在,问题是,最终我再次需要原始值(因为我必须根据这个变量连接表,而另一个表有每个类别的原始数字--1,2,3,9,而不是标签)。

转换为数字不起作用(“未知”类别映射到4而不是9)

代码语言:javascript
复制
# And back to numeric
df1$group_num <- as.numeric(df1$group_f)

df1

   group group_f group_num
1      1      G1         1
2      2      G2         2
3      3      G3         3
4      9 Unknown         4
5      3      G3         3
6      2      G2         2
7      9 Unknown         4
8      1      G1         1
9      9 Unknown         4
10     3      G3         3
11     2      G2         2

?factor说:

as.numeric应用于一个因素是没有意义的,并且可能通过隐式强制发生。为了将因子f转换为近似其原始数值,建议使用as.numeric(level(F))f,并且比as.numeric(as.character(f))更有效。

但是级别上的as.numeric也不起作用(因为级别现在是带有标签的字符,因此不能强制使用数字):

代码语言:javascript
复制
> as.numeric(levels(df1$group_f))
[1] NA NA NA NA
Warning message:
NAs introduced by coercion 

是否有一种方法来创建一个因子变量,使其保留原始值?(在本例中为1,2,3,9)?

注意:这个想法是让有一个单一的因子变量,它有描述类别的标签,以及底层的原始数字。虽然在本例中,我将变量group保留在新创建的因子变量上,但在我的实际用例中,我将/不能这样做(这是一个巨大的数据集)。

EN

回答 1

Stack Overflow用户

发布于 2021-09-13 20:09:23

如果您保留用于创建因子的级别和标签向量,则可以使用这些向量从因子标签向后工作以返回值。

代码语言:javascript
复制
group_levels <- c(1, 2, 3, 9)
group_labels <- c("G1", "G2", "G3", "Unknown")
df1$reconstituted_group_num <- group_levels[as.numeric(df1$group_f)]

这是因为标签向量中的索引值与级别向量中的索引值成直线:未知有索引4,其级别9也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39779688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档