An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20080903/18965160/attachment.pl>
subsetting a data frame
2 messages · joseph, Marc Schwartz
on 09/03/2008 05:06 PM joseph wrote:
I have a data frame that looks like this: V1 V2 V3 a b 0:1:12 d f 1:2:1 c d 1:0:9 where V3 is in the form x:y:z Can someone show me how to subset the rows where the values of x, y and z <= 10: V1 V2 V3 d f 1:2:1 c d 1:0:9 Thanks Joseph
How about this:
DF[sapply(strsplit(as.character(DF$V3), ":"),
function(i) all(as.numeric(i) <= 10)), ] V1 V2 V3 2 d f 1:2:1 3 c d 1:0:9 Basically, use strsplit() to break apart 'V3':
strsplit(as.character(DF$V3), ":")
[[1]] [1] "0" "1" "12" [[2]] [1] "1" "2" "1" [[3]] [1] "1" "0" "9" The use sapply() to crawl the list, converting the elements to numerics and do the value comparison:
sapply(strsplit(as.character(DF$V3), ":"),
function(i) all(as.numeric(i) <= 10)) [1] FALSE TRUE TRUE The above then returns the logical vector to subset the rows of 'DF'. HTH, Marc Schwartz