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

时间:2016-09-29 20:45:37

标签: r

这里有一些工作代码来说明我的问题:

# Categorical variable recorded as numeric (integer)
df1 <- data.frame(group = c(1, 2, 3, 9, 3, 2, 9, 1, 9, 3, 2))

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

# 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)

# 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(levels(f))[f]建议使用   比as.numeric(as.character(f))稍微高效。

但是as.numeric级别上的任何一个都不起作用('因为级别现在是标签的字符,所以不能被强制为数字):

> as.numeric(levels(df1$group_f))
[1] NA NA NA NA
Warning message:
NAs introduced by coercion 

有没有办法创建一个因子变量,以便保留原始值? (本例中为1,2,3,9)???

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

0 个答案:

没有答案