[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