[R] subsetting a data frame
Marc Schwartz
marc_schwartz at comcast.net
Thu Sep 4 00:24:58 CEST 2008
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
More information about the R-help
mailing list