[R] how to use "replace" for efficiency

willem vervoort willemvervoort at gmail.com
Wed Jul 25 09:30:50 CEST 2007


Hi

I think I have been struggling to use replace correctly, I usually
work my way around this using a loop, but I think this is in fact
inefficient.

I have a dataset with runoff from three plots and associated rainfall.
However either the datarecording was sloppy, or the rainfall very
patchy. So I am trying to remove data from my dataset for which the
runoff is larger than the rainfall on the same day. (Don't worry, the
rainfall data is in fact the rainfall associated to the three days
around the runoff event). On days that no runoff was recorded the data
includes "NA"

The dataset is called wheat2
I use the following:
for (i in 1:nrow(wheat2)) {
# Insert NA's if runoff data > rainfall data
    if (is.na(wheat2[i,5:7])==FALSE && any(wheat2[i,5:7]>wheat2[i,8])) {
        wheat2[i,5:7] <- NA
        }
    }

I tried this:
wheat1 <- replace(wheat2[,5:7],is.na(wheat2[i,5:7])==FALSE &&
any(wheat2[i,5:7]>wheat2[i,8]),NA)
wheat3 <- cbind(wheat2[1:4],wheat1,wheat2[,8])

> wheat3[5539,] # the culprit row
DateRain      Rain  StartDate  EndDate  RO.A RO.B RO.C filtered.Rain
5539 28-Feb-58        0 27-Feb-58 28-Feb-58        61.5        88.7
      65           0

Not sure what I am doing wrong, any help is appreciated

Willem

Here is a data sample and note the very high value for runoff (RO) and
no rainfall on 28 Feb 1958

DateRain      Rain  StartDate  EndDate  RO.A RO.B RO.C filtered.Rain
14-Feb-58 0   NA NA NA 0
15-Feb-58 0   NA NA NA 0
16-Feb-58 0   NA NA NA 0
17-Feb-58 0   NA NA NA 0
18-Feb-58 0 18-Feb-58 18-Feb-58 0 0 0 23.6
19-Feb-58 23.6   NA NA NA 23.6
20-Feb-58 0   NA NA NA 23.6
21-Feb-58 0   NA NA NA 0
22-Feb-58 0   NA NA NA 0
23-Feb-58 0   NA NA NA 0
24-Feb-58 0   NA NA NA 0
25-Feb-58 0   NA NA NA 0
26-Feb-58 0   NA NA NA 0
27-Feb-58 0   NA NA NA 0
28-Feb-58 0 27-Feb-58 28-Feb-58 61.5 88.7 65 0
01-Mar-58 0   NA NA NA 0
02-Mar-58 0   NA NA NA 0
03-Mar-58 0   NA NA NA 0
04-Mar-58 0   NA NA NA 1.5
05-Mar-58 1.5   NA NA NA 1.5
06-Mar-58 0   NA NA NA 1.5
07-Mar-58 0   NA NA NA 0.5
08-Mar-58 0.5   NA NA NA 0.5
09-Mar-58 0   NA NA NA 7.6
10-Mar-58 7.1   NA NA NA 9.1
11-Mar-58 2   NA NA NA 57.4
12-Mar-58 48.3 09-Mar-58 12-Mar-58 0.1 1.5 0 51.1
13-Mar-58 0.8   NA NA NA 49.9
14-Mar-58 0.8   NA NA NA 1.6



More information about the R-help mailing list