如何保存变量中的原始值变成一个因子?
这里有一些工作代码来说明我的问题:
# 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
保留在新创建的因子变量中,但在我的真实用例中,我不会那么做(它是一个巨大的数据集)。
上一篇: How to preserve original values in a variable turned into a factor?