[R] How do I get the row indices?
Marc Schwartz (via MN)
mschwartz at mn.rr.com
Fri Sep 16 20:05:38 CEST 2005
On Fri, 2005-09-16 at 10:34 -0700, Martin Lam wrote:
> Hi,
>
> I was wondering if it's possible to get the row
> numbers from a filtering. Here's an example:
>
> # give me the rows with sepal.length == 6.2
> iris[(iris[,1]==6.2),]
>
> # output
> Sepal.Length Sepal.Width Petal.Length Petal.Width
> Species
> 69 6.2 2.2 4.5 1.5
> versicolor
> 98 6.2 2.9 4.3 1.3
> versicolor
> 127 6.2 2.8 4.8 1.8
> virginica
> 149 6.2 3.4 5.4 2.3
> virginica
>
> What I really want is that it return the row numbers:
> 69, 98, 127, 149.
>
> Thanks in advance,
>
> Martin
Martin,
First: Be very, very careful when performing exact equalities on
floating point numbers. They won't always result in the answer you
expect. For more information see R FAQ 7.31: Why doesn't R think these
numbers are equal?
Second:
See ?all.equal, ?sapply and ?which. Here is a possible vectorized
solution:
> which(sapply(iris[, 1], function(x) isTRUE(all.equal(x, 6.2))))
[1] 69 98 127 149
The above applies isTRUE(all.equal(x, 6.2)) for each element 'x' in
iris[, 1], returning the indices of the TRUE results for the near
equality comparison, based upon the tolerance argument in all.equal().
HTH,
Marc Schwartz
More information about the R-help
mailing list