# [R] index vector

Marc Schwartz (via MN) mschwartz at mn.rr.com
Fri Sep 29 22:54:43 CEST 2006

```On Fri, 2006-09-29 at 16:13 -0400, bertrand toupin wrote:
> Hi!  1st time I'm posting here.  I'm beginning to learn R and I've
> encountered a problem that I'm unable to solve so far.
>
> I have  a 20 000 x 5 matrix.  In the 5th column, I have elevation.
> Missing value are actually put to -99999.  I want to track down the
> index of those values and replace them with NA.  I've read that to
> replace, the command "replace" is enough.  I just don't know how to
> construct the index vector that contains the index of -99999 values.
>
> Hope this makes sense,
> Thanks!
> Philippe

See ?is.na and note the use of:

is.na(x) <- value

Example:

> mat <- matrix(sample(50), 10, 5)

> mat
[,1] [,2] [,3] [,4] [,5]
[1,]   24   39   40   30    5
[2,]    8   44    3   34   47
[3,]   23   12   16   14   45
[4,]   35   26    2   11    6
[5,]   13   15   42   33   19
[6,]    7   36   31   49   37
[7,]   29   41    9   27    4
[8,]   48    1   22   25   17
[9,]   43   32   28   38   20
[10,]   18   50   46   21   10

# Set some values in column 5 to -99999
> mat[sample(10, 3), 5] <- -99999

> mat
[,1] [,2] [,3] [,4]   [,5]
[1,]   24   39   40   30      5
[2,]    8   44    3   34     47
[3,]   23   12   16   14     45
[4,]   35   26    2   11      6
[5,]   13   15   42   33 -99999
[6,]    7   36   31   49 -99999
[7,]   29   41    9   27      4
[8,]   48    1   22   25     17
[9,]   43   32   28   38     20
[10,]   18   50   46   21 -99999

# Use which to get the indices within column 5
# of those values which are -99999
# See ?which
> which(mat[, 5] == -99999)
[1]  5  6 10

# Now extend that and set those to NA
> is.na(mat[, 5]) <- which(mat[, 5] == -99999)

> mat
[,1] [,2] [,3] [,4] [,5]
[1,]   24   39   40   30    5
[2,]    8   44    3   34   47
[3,]   23   12   16   14   45
[4,]   35   26    2   11    6
[5,]   13   15   42   33   NA
[6,]    7   36   31   49   NA
[7,]   29   41    9   27    4
[8,]   48    1   22   25   17
[9,]   43   32   28   38   20
[10,]   18   50   46   21   NA

Note one other possibility, which is that if you used one of the