如何创建一个因子但保留基础值,而不仅仅是整数代码?

时间:2014-05-19 14:04:18

标签: r data-structures label

a <- factor(2:4, labels=c("a", "b", "c"))
a
## [1] a b c
## Levels: a b c

as.numeric(a)
## [1] 1 2 3

我想删除标签并获取数值2,3,4,但as.numeric(a)的结果为1 2 3。不要告诉我答案是as.numeric(a) + 1。谢谢。

3 个答案:

答案 0 :(得分:4)

由于您没有为为什么提供任何更广泛的背景信息,因此以下内容只是猜测可能有用的内容:

a<-factor(2:4, labels=c("a", "b", "c"))
> names(a) <- as.character(2:4)
> a
2 3 4 
a b c 
Levels: a b c
> as.integer(names(a))
[1] 2 3 4

我不能说我之前曾经使用过“命名因素”,坦白说这个概念对我来说有些奇怪。

如果你真的不想要一个因素,那么只需做:

a <- 2:4
names(a) <- letters[1:3]

可能就足够了。

答案 1 :(得分:1)

如果要更改因子的级别,只需使用:

levels(a) <- c("a"=2,"b"=3,"c"=4)

给出:

> a
[1] 2 3 4
Levels: 2 3 4

@joran在答案中表示,使用names也可以。但是,在我看来,没有特别需要使用as.character

names(a) <- 2:4

给出:

> a
2 3 4 
a b c 
Levels: a b c

此外,您可以使用as.integer作为@joran显示。


使用names参数为值指定名称。 levels参数仅用于因子变量。

例如,当您将矢量设置为:

a <- 2:4
names(a) <- letters[1:3]

使用levels(a),提供:NULL

将矢量设置为:

a <- 2:4
levels(a) <- c("ab","bc","cd")

使用names(a),提供:NULL

答案 2 :(得分:0)

我写了一个名为“lfactors”的软件包,你可能会在这里欣赏

app\tests\fixtures

它还有其他你喜欢的功能

a <- lfactor(2:4,levels=2:4, labels=c("a", "b", "c"))
a
# [1] a b c
# Levels: a b c
# Numeric levels: 2 3 4 
as.numeric(a)
# [1] 2 3 4