gpt4 book ai didi

r - 如何在变成因子的变量中保留原始值?

转载 作者:行者123 更新时间:2023-12-04 13:48:26 25 4
gpt4 key购买 nike

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

# 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 applied to a factor is meaningless, and may happen by implicit coercion. To transform a factor f to approximately its original numeric values, as.numeric(levels(f))[f] is recommended and slightly more efficient than 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沿着新创建的因子变量,在我的实际用例中,我会/不能这样做(这是一个巨大的数据集)。

最佳答案

如果保留用于创建因子的水平和标签向量,则可以使用它们从因子标签向后工作以返回值。

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 也是如此。

关于r - 如何在变成因子的变量中保留原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39779688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com