假设我有一个看起来像这样的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)
为什么?
答案 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 ...