恢复因子代码R.

时间:2011-01-31 18:20:02

标签: r

假设我有一个看起来像这样的data.frame:

df.test <- data.frame(1:26, 1:26)
colnames(df.test) <- c("a","b")

我申请了一个因素:

df.test$a <- factor(df.test$a, levels=c(1:26), labels=letters)

现在,我想如何将它转换回整数代码:

as.numeric(df.test[1])## replies with an error code.

但这有效:

as.numeric(df.test$a)

为什么?

4 个答案:

答案 0 :(得分:3)

实际上Joshua的链接在这里不适用,因为任务不是从具有数字解释的级别的因子转换。您产生错误的原始工作几乎是正确的。在1:

之前只丢失了一个逗号
df.test <- data.frame(1:26, 1:26)
colnames(df.test) <- c("a","b")
df.test$a <- factor(df.test$a, levels=c(1:26), labels=letters)
as.numeric(df.test[,1])
# [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18
# [19] 19 20 21 22 23 24 25 26

或者您可以使用“[[”

> as.numeric(df.test[[1]])
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18
[19] 19 20 21 22 23 24 25 26

答案 1 :(得分:2)

as.numeric会将因子转换为数字:

as.numeric(df.test$a)

答案 2 :(得分:1)

要响应您的编辑:请记住,因子包含两部分:1)标签,以及2)基础整数代码。我在评论中链接的两个答案是将标签转换为数字。如果您只想获取内部代码,请使用as.integer(df.test$a)的示例部分中所示的?factor。 aL3xa回答了关于为什么as.numeric(df.test[1])会抛出错误的问题。

答案 3 :(得分:1)

按名称访问列会为您提供因子向量,可以将其转换为数字。 但是,数据框是列表(列),当您使用单括号运算符和列表中的单个数字时,您将获得长度为1的列表。这同样适用于数据框,因此df.test[1]会将第一列作为新数据框,而不能由as.numeric()强制执行。我不知道这个!

> str(df.test$a)
 Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ...
> str(df.test[1])
'data.frame':   26 obs. of  1 variable:
 $ a: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ...