[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
read.table() family functions to read in a delimited ASCII file
containing the data set, you can set the 'na.strings' argument to
"-99999" and have it set these to NA upon importing. See ?read.table
for more information.
HTH,
Marc Schwartz
More information about the R-help
mailing list