[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