On Nov 17, 2010, at 6:57 PM, Sam Albers wrote:



On Wed, Nov 17, 2010 at 3:49 PM, David Winsemius <dwinsem...@comcast.net > wrote:

On Nov 17, 2010, at 6:27 PM, Sam Albers wrote:

Hello all,

I have a fairly simple data manipulation question. Say I have a dataframe
like this:

dat <- as.data.frame(runif(7, 3, 5))
dat$cat <- factor(c("1","4","13","1","4","13","13A"))

dat
 runif(7, 3, 5) cat
1       3.880020   1
2       4.062800   4
3       4.828950  13
4       4.761850   1
5       4.716962   4
6       3.868348  13
7       3.420944 13A

Under the dat$cat variable the 13A value is an analytical replicate. For my purposes I would like to drop all values that are not an integer (i.e. 13A) from the dataframe. Can anyone recommend a way to drop all rows where the
cat value is a non-integer?
DW----
dat[!is.na(as.numeric(as.character(dat$cat))), ]

(You do get a warning about coercion to NA's but that is a good sign since that is what we were trying to exclude in the first place.)
SA---
Apologies. This worked fine but I didn't quite outline that I also wanted to drop the unused levels of the factor as well. drop=TRUE doesn't seem to work, so can anyone suggest a way to drop the factor levels in addition to the values?

> sd <- dat[!is.na(as.numeric(as.character(dat$cat))), ]
Warning message:
In `[.data.frame`(dat, !is.na(as.numeric(as.character(dat$cat))),  :
  NAs introduced by coercion
> str(sd)
'data.frame':    6 obs. of  2 variables:
 $ runif(7, 3, 5): num  3.88 4.06 4.83 4.76 4.72 ...
 $ cat           : Factor w/ 4 levels "1","13","13A",..: 1 4 2 1 4 2

Right. Well, pretty simple actually:
dat2 <- dat[!is.na(as.numeric(as.character(dat$cat))), ]
dat2$cat <- factor(dat2$cat) # removes the no-longer-existent levels

<restored original quote levels and stripped a bunch of "signage">
--
David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to