I have two data sets that are supposed to be the same size but aren't. I need to trim the values from A that are not in B and vice versa in order to eliminate noise from a graph that's going into a report. (Don't worry, this data isn't being permanently deleted!)
I have read the following:
- Selecting columns in R data frame based on those *not* in a vector
- http://www.ats.ucla.edu/stat/r/faq/subset_R.htm
- How to combine multiple conditions to subset a data-frame using "OR"?
But I'm still not able to get this to work right. Here's my code:
bg2011missingFromBeg <- setdiff(x=eg2011$ID, y=bg2011$ID)
#attempt 1
eg2011cleaned <- subset(eg2011, ID != bg2011missingFromBeg)
#attempt 2
eg2011cleaned <- eg2011[!eg2011$ID %in% bg2011missingFromBeg]
The first try just eliminates the first value in the resulting setdiff vector. The second try yields and unwieldy error:
Error in `[.data.frame`(eg2012, !eg2012$ID %in% bg2012missingFromBeg)
: undefined columns selected
Best Answer
This will give you what you want:
The error in your second attempt is because you forgot the
,
In general, for convenience, the specification
object[index]
subsets columns for a 2dobject
. If you want to subset rows and keep all columns you have to use the specificationobject[index_rows, index_columns]
, whileindex_cols
can be left blank, which will use all columns by default.However, you still need to include the
,
to indicate that you want to get a subset of rows instead of a subset of columns.