How can I drop unused levels from a data frame?

后端 未结 3 1554
执念已碎
执念已碎 2020-12-04 15:50

Given the following mock data:

set.seed(123)
x <- data.frame(let = sample(letters[1:5], 100, replace = T), 
                num = sample(1:10, 100, replac         


        
相关标签:
3条回答
  • 2020-12-04 16:00

    Just do y$let <- factor(y$let). Running factor on an existing factor variable will reset the levels to only those that are present.

    0 讨论(0)
  • 2020-12-04 16:08

    There's a recently added function in R for this:

    y <- droplevels(y)
    
    0 讨论(0)
  • 2020-12-04 16:18

    Adding to Hong Ooi's answer, here is an example I found from R-Bloggers.

    # Create some fake data
    x <- as.factor(sample(head(colors()),100,replace=TRUE))
    levels(x)
    x <- x[x!="aliceblue"]
    levels(x) # still the same levels
    table(x) # even though one level has 0 entries!
    
    The solution is simple: run factor() again:
    x <- factor(x)
    levels(x)
    
    0 讨论(0)
提交回复
热议问题