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.