[R] Including only a subset of the levels of a factor XXXX

David Winsemius dwinsemius at comcast.net
Thu Sep 1 21:29:05 CEST 2011


On Sep 1, 2011, at 2:59 PM, Dan Abner wrote:

> Hello everyone,
>
> I have the following factor:
>
> levels(pp_income)
> [1] ""       "1"      "2"      "3"      "4"      "5"      "6"      "7"
> [9] "8"      "9"      "Renter"
>
> I want to subset so that only values 1:9 are included. I have the  
> following:
>
>> income<-pp_income[pp_income %in% c(1:9)]
>>
>> levels(income)
> [1] ""       "1"      "2"      "3"      "4"      "5"      "6"      "7"
> [9] "8"      "9"      "Renter"
>
> Why is this not working

Actually it could be that it did succeed but you just have levels  
attributes that are unpopulated in your result. Try:

table{income)

If that looks correct, then do this:

income <- factor(income)  # will drop unused levels


> and can someone please suggest a solution?

If on the other hand you got the wrong values then there was an  
undesired coercion of either 'factor' class to 'numeric' or of  
'numeric' to 'character'. I am fairly sure this will remove any  
ambiguity:

income<-pp_income[as.character(pp_income)
                         %in% as.character(1:9)]

(You would still get the puzzling extra levels if you looked with  
levels(income).)

>
> Thank you!
>
> Dan
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list