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

______________________________________________
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