[R] Drop non-integers
David Winsemius
dwinsemius at comcast.net
Thu Nov 18 01:08:18 CET 2010
On Nov 17, 2010, at 6:57 PM, Sam Albers wrote:
>
>
> On Wed, Nov 17, 2010 at 3:49 PM, David Winsemius <dwinsemius at 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
More information about the R-help
mailing list