[R] Drop non-integers

Duncan Murdoch murdoch.duncan at gmail.com
Thu Nov 18 00:55:26 CET 2010


On 17/11/2010 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?

You can see if an entry is non-numeric using

nonnumeric <- is.na( as.numeric( as.character(dat$cat) ) )

With the data in your example, that test would be good enough.  If you'd 
also like to be able to rule out non-integers like 13.1, you could use 
the lines:

  value <-  as.numeric( as.character(dat$cat) ) # get the numbers
  noninteger <- value %% 1 != 0   # see if there's a fractional part
  noninteger <- noninteger | is.na(noninteger)  # get rid of the NA's 
from line 1

Once you have a logical vector indicating which rows to keep, use it to 
index:

dat[!noninteger,]

Duncan Murdoch



More information about the R-help mailing list