[R] Question about creating unique factor labels with the factor function

Petr Pikal petr.pikal at precheza.cz
Wed Jul 20 11:55:07 CEST 2005


Hallo

I am not sure what you want to achieve.

your factor has 3 levels but with only 2 different labels

> hb
[1] 1 1 1 1 1 1 2 2 2
Levels: 1 1 2

but

> str(hb)
 Factor w/ 3 levels "1","1","2": 1 1 1 2 2 2 3 3 3

so you gave only one label to level 1 and 2. You can give the same 
label to any level you choose but I can not see a reason in it.

>  hb <- factor(c(1,1,1,2,2,2,3,3,3), 
levels=c(1,2,3),labels=c(1,1,1)) 
> hb
[1] 1 1 1 1 1 1 1 1 1
Levels: 1 1 1

or

>  hb <- factor(c(1,1,1,2,2,2,3,3,3), 
levels=c(1,2,3),labels=c(3,100,100)) 
> hb
[1] 3   3   3   100 100 100 100 100 100
Levels: 3 100 100
> str(hb)
 Factor w/ 3 levels "3","100","100": 1 1 1 2 2 2 3 3 3
-------------------------------------------------------------------------
but surprising for me is an ordered behaviour which I find a bit 
odd.

> hb
[1] 3   3   3   100 100 100 100 100 100
Levels: 3 100 100

> ordered(hb)
[1] 3   3   3   100 100 100 100 100 100
Levels: 3 < 100 < 100

> str(hb)
 Factor w/ 3 levels "3","100","100": 1 1 1 2 2 2 3 3 3

> str(ordered(hb))
 Ord.factor w/ 3 levels "3"<"100"<"100": 1 1 1 2 2 2 2 2 2

> unique((hb))
[1] 3   100 100     	#three levels and three values
Levels: 3 100 100

> unique(ordered(hb))
[1] 3   100		# three levels but only 2 values?
Levels: 3 < 100 < 100
*************************************************
Can anybody explain why unique(ordered()) results in only 2 
displayed levels although this

> str(unique(ordered(hb)))
 Ord.factor w/ 3 levels "3"<"100"<"100": 1 2

says that the factor still have 3 levels?

Best regards
Petr




On 19 Jul 2005 at 15:11, Gregory Gentlemen wrote:

> Hi guys,
> 
> I ran into a problem of not being able to create unique labels when
> creating a factor. Consider an example below:
> 
>  hb <- factor(c(1,1,1,2,2,2,3,3,3), levels=c(1,2,3),labels=c(1,1,2)) >
> hb [1] 1 1 1 1 1 1 2 2 2 Levels: 1 1 2 
> unique(hb) [1] 1 1 2 Levels:
> 1 1 2
> 
> How come there are three unique levels, I thought this would only
> create one unique level?
> 
> > unique(as.ordered(hb))
> [1] 1 2
> Levels: 1 < 1 < 2
> 
> Is as.ordered the only solution?
> 
> Thanks in advance,
> Greg
> 
> 
> __________________________________________________
> 
> 
> 
>  [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html

Petr Pikal
petr.pikal at precheza.cz




More information about the R-help mailing list