Skip to content

levels update

7 messages · Antje, jim holtman, Erich Neuwirth +3 more

#
Hello,

I hope this question is not too stupid. I would like to know how to update 
levels after subsetting data from a data.frame.

df <- data.frame(factor(c("a","a","c","b","b")), c(4,5,6,7,8), c(9,1,2,3,4))
names(df) <- c("X1","X2","X3")

my.sub <- subset(df, X1 == "a" | X1 == "b")
levels(my.sub$X1)

# still gives me "a","b","c", though the subset does not contain entries with 
"c" anymore

I guess, the solution is rather simple, but I cannot find it.

Antje
#
try this:
[1] "a" "b" "c"
[1] "a" "b"

        
On Fri, Dec 5, 2008 at 7:50 AM, Antje <niederlein-rstat at yahoo.de> wrote:

  
    
#
I do the following for a subsetted dataframe:

cleanfactors <- function(mydf){
  outdf<-mydf
  for (i in 1:dim(mydf)[2]){
    if (is.factor(mydf[,i]))
  outdf[,i]<-factor(mydf[,i])
  }
outdf
}
Antje wrote:

  
    
#
On Fri, 5 Dec 2008, jim holtman wrote:

            
I find

my.sub$X1 <- my.sub$X1[drop=TRUE]

a lot more self-explanatory.  See ?"[.factor".  However, if you find 
yourself wanting to do this, ask why you have a factor (rather than a 
character vector) in the first place.

  
    
#
On Fri, Dec 5, 2008 at 6:50 AM, Antje <niederlein-rstat at yahoo.de> wrote:
You might find it easier just to work with character vectors:

options(stringsAsFactors = FALSE)

Hadley
#
Thanks a lot!!!
the "drop" thing was exactly what I was looking for (I already used it some 
time ago but forgot about it).

Thanks to everybody else too.

Antje


Prof Brian Ripley schrieb:
#
update
c(9,1,2,3,4))
with
Two questions in one afternon; aren't I good to you!

levels(my.sub$X1[,drop=TRUE])
[1] "a" "b"
levels(factor(my.sub$X1))
[1] "a" "b"

Regards,
Richie.

Mathematical Sciences Unit
HSL


------------------------------------------------------------------------
ATTENTION:

This message contains privileged and confidential inform...{{dropped:20}}