Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6638333
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 25, 20262026-05-25T23:25:24+00:00 2026-05-25T23:25:24+00:00

I am using something like this to filter my data frame: d1 = data.frame(data[data$ColA

  • 0

I am using something like this to filter my data frame:

d1 = data.frame(data[data$ColA == "ColACat1" & data$ColB == "ColBCat2", ])

When I print d1, it works as expected. However, when I type d1$ColB, it still prints everything from the original data frame.

> print(d1)
ColA     ColB
-----------------
ColACat1 ColBCat2
ColACat1 ColBCat2

> print(d1$ColA)
Levels: ColACat1 ColACat2

Maybe this is expected but when I pass d1 to ggplot, it messes up my graph and does not use the filter. Is there anyway I can filter the data frame and get only the records that match the filter? I want d1 to not know the existence of data.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-25T23:25:25+00:00Added an answer on May 25, 2026 at 11:25 pm

    As you allude to, the default behavior in R is to treat character columns in data frames as a special data type, called a factor. This is a feature, not a bug, but like any useful feature if you’re not expecting it and don’t know how to properly use it, it can be quite confusing.

    factors are meant to represent categorical (rather than numerical, or quantitative) variables, which comes up often in statistics.

    The subsetting operations you used do in fact work normally. Namely, they will return the correct subset of your data frame. However, the levels attribute of that variable remains unchanged, and still has all the original levels in it.

    This means that any method written in R that is designed to take advantage of factors will treat that column as a categorical variable with a bunch of levels, many of which just aren’t present. In statistics, one often wants to track the presence of ‘missing’ levels of categorical variables.

    I actually also prefer to work with stringsAsFactors = FALSE, but many people frown on that since it can reduce code portability. (TRUE is the default, so sharing your code with someone else may be risky unless you preface every single script with a call to options).

    A potentially more convenient solution, particularly for data frames, is to combine the subset and droplevels functions:

    subsetDrop <- function(...){
        droplevels(subset(...))
    }
    

    and use this function to extract subsets of your data frames in a way that is assured to remove any unused levels in the result.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Using something like this: try: # Something... except Exception as excep: logger = logging.getLogger(component)
I'm using something like this on my server: TcpServerChannel channel = new TcpServerChannel(settings.RemotingPort); ChannelServices.RegisterChannel(channel,
Hoping that using something like this demo it is possible to drag items within
Freemarker has the ability to do text escaping using something like this: <#escape x
So, I'm trying to consume a webservice using something like this: $client = new
Writing something like this using the loki library , typedef Functor<void> BitButtonPushHandler; throws a
If I do something like this: using (SqlCommand cmd = new SqlCommand(SELECT * FROM
I'd like to do something like this to tick a checkbox using jQuery :
Is it possible to accomplish something like this using linqtosql? select * from table
does anyone know if you can do something like this using the (N)Hibernate criteria

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.