Dear list,

I have a data.frame with segments between river junctions and dimensionless predictions of runoff (runoff/area) at some of these junctions. As I want to plot my values on a continuous river network (this data.frame is part of a SpatialLinesDataFrame), I would like to change NA values to the closest non-NA value downstream.

Here is a simple example:
> examp = data.frame(FROMJCT = c(1,2,3,4,5,7,8,9,10,11,12,13,14),TOJCT = c(2,3,4,5,6,4,7,8,8,10,8,12,9))
> examp$pred = NA
> examp$pred[c(2,4,5,7,13)] = c(1,2,3,4,5)
> examp
   FROMJCT TOJCT pred
1        1     2   NA
2        2     3    1
3        3     4   NA
4        4     5    2
5        5     6    3
6        7     4   NA
7        8     7    4
8        9     8   NA
9       10     8   NA
10      11    10   NA
11      12     8   NA
12      13    12   NA
13      14     9    5

"FROMJCT" describes the upstream and "TOJCT" the downstream junction. examp$pred[7] above should hence get the value 3, as its "TOJCT" junction is the same as the "FROMJCT" junction of examp$pred[6]. examp$pred[8] should get the same value, as it is linked to examp$pred[6] through examp$pred[7]. I can do this iteratively by propagating values upwards in the river network by combining a while and a for-loop:

ichange = 1
while (ichange > 0) {
  ichange = 0
  for (i in 1:dim(examp)[1]) {
    if (!is.na(examp$pred[i])) {
      toid = which(examp$TOJCT == examp$FROMJCT[i])
      if (length(toid) > 0 && is.na(examp$pred[toid])) {
        examp$pred[toid] = examp$pred[i]
        ichange = ichange + 1
      }
    }
  }
  print(ichange)
}


But this looks messy and is rather slow when the river network is described through a large number of segments. I am quite sure that I have missed a better way of propagating the values. This is a preprocessing step before plotting a result in a documentation example, so I am looking for a short, intuitive and nice solution... Any hints?

Thanks,
Jon

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to