Skip to content

Factor function

11 messages · Lisa, Ista Zahn, PIKAL Petr +2 more

#
Dear All,

I just want to remove ?NA? from the levels of a factor.  For example:

d<-data.frame(matrix(c("ww","ww","xx","yy","ww","yy","xx","yy","NA"),
ncol=3, byrow=TRUE))
[1] xx yy NA
Levels: NA xx yy

But ?NA? is still listed in the levels. How can I solve this problem? Thanks
in advance.

Lisa


--
View this message in context: http://r.789695.n4.nabble.com/Factor-function-tp3473984p3473984.html
Sent from the R help mailing list archive at Nabble.com.
#
Hi Lisa,

NA != "NA"

The first represents a missing observation, the second represents a
character string.

HTH,
Ista
On Mon, Apr 25, 2011 at 3:53 PM, Lisa <lisajca at gmail.com> wrote:

  
    
#
Yes... did you understand that NA is not equal to "NA"?

Best,
Ista
On Mon, Apr 25, 2011 at 4:31 PM, Lisa <lisajca at gmail.com> wrote:

  
    
#
On Mon, Apr 25, 2011 at 12:53:40PM -0700, Lisa wrote:
The column d[, 3] is already a factor. It is possible to avoid
this using

  d<-data.frame(matrix(c("ww","ww","xx","yy","ww","yy","xx","yy","NA"),
  ncol=3, byrow=TRUE), stringsAsFactors=FALSE)

Then, we get

  factor(d[, 3], exclude="NA")

  [1] xx   yy   <NA>
  Levels: xx yy

Hope this helps.

Petr Savicky.
#
Hi


d<-data.frame(matrix(c("ww","ww","xx","yy","ww","yy","xx","yy","NA"), 
ncol=3, byrow=TRUE))

Change character value "NA" to missing value <NA>
d[d[,3]=="NA",3]<-NA

If you want drop any unused levels of a factor just use

factor(d[,3])
[1] xx   yy   <NA>
Levels: xx yy

Regards
Petr


r-help-bounces at r-project.org napsal dne 25.04.2011 23:03:15:
just
http://r.789695.n4.nabble.com/Factor-function-
http://www.R-project.org/posting-guide.html
#
On Tue, Apr 26, 2011 at 10:51:33AM +0200, Petr PIKAL wrote:
An explicit NA is a good idea. If the NA is introduced before
creating the data frame, then also the data frame will not
contain the unwanted level.

  a<-matrix(c("ww","ww","xx","yy","ww","yy","xx","yy","NA"), 
  ncol=3, byrow=TRUE)
  a[a[,3]=="NA",3]<-NA
  d<-data.frame(a)
  d[,3]

  [1] xx   yy   <NA>
  Levels: xx yy

If the replacement should be done in the whole matrix, then

  a[a=="NA"]<-NA

may be used.

Petr Savicky.
#
On Apr 26, 2011, at 18:52 , Petr Savicky wrote:

            
I think there's a buglet in here. According  to the docs, "If exclude is used it should also be a factor with the same level set as x or a set of codes for the levels to be excluded". However, that plainly doesn't work:
[1] x  y  NA
Levels: NA x y
[1] x  y  NA
Levels: NA x y
[1] x  y  NA
Levels: NA x y

In these cases, the internal logic converts exclude to integer, and then uses match(levels, exclude) where levels is unique(x), i.e., a factor. This won't work because match() matches on the _character_ representation of x.

The cleanest version that I can think of for the original problem is
[1] x    y    <NA>
Levels: x y