[R] Computing Water Balance using a loop.

Jeff Newmiller jdnewmil at dcn.davis.CA.us
Thu Oct 23 16:23:15 CEST 2014


Counting chickens after they have left the coop is not going to work. If your inputs push w outside the limits of physics then your input data are invalid. Arbitrarily forcing w to fit in that case partially ignores the inputs anyway... and since there are many ways for the data to be invalid you should be trying to understand how your data are invalid so you can figure out if you can extract any meaning from it. Drift? Random (lots of ways... which)? Offset? Marking the bad records in a new status column is a start... blindly proceeding to pretend as though there were no problem in the data is deceptive.

Once you get the input data cleaned up so you don't need to butcher the output, the R way to do this is

Wb30$Water_Balance <- with( Wb30, cumsum( Rainfall - Evaporation ) )
Wb30$ValidWB <- with( Wb30, 0 == cumsum( 0 <= Water_Balance & Water_Balance <= 100 ) )

---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
--------------------------------------------------------------------------- 
Sent from my phone. Please excuse my brevity.

On October 23, 2014 6:35:27 AM PDT, Frederic Ntirenganya <ntfredo at gmail.com> wrote:
>Dear Duncan,
>
>Those condition should be there and also look at Rainfall and
>evaporation
>columns.
>If i change it to be like the following loop, it can't do it.
>
>The problem is how to include those conditions and also respect the
>formula?
>
>wb=c()
>for (w in 1:length(Wb30$Water_Balance)){
>  if(w<0){
>   w=0
>  }
>
> wb=Wb30$Water_Balance[w-1] + Wb30$Rainfall[w]-Wb30$Evaporation[w]
>}
>wb
>
>Regards,
>Frederic.
>
>Frederic Ntirenganya
>Maseno University,
>African Maths Initiative,
>Kenya.
>Mobile:(+254)718492836
>Email: fredo at aims.ac.za
>https://sites.google.com/a/aims.ac.za/fredo/
>
>On Thu, Oct 23, 2014 at 3:44 PM, Duncan Murdoch
><murdoch.duncan at gmail.com>
>wrote:
>
>> On 23/10/2014, 8:33 AM, Frederic Ntirenganya wrote:
>> > Dear All,
>> >
>> > I want to calculate water balance using the following formula:
>> > Water balance today = Water balance yesterday + Rainfall −
>Evaporation
>> >
>> > This is a sample of data I am using:
>> >
>> > head(Wb30)
>> >   May Rainfall Evaporation Water_Balance
>> > 1   7        0           5             0
>> > 2   8       10           5            NA
>> > 3   9        0           5            NA
>> > 4  10        0           5            NA
>> > 5  11        2           5            NA
>> > 6  12       23           5            NA
>> >
>> > The following is the loop am trying to use but it is not working
>well.
>> >
>> > #Water balance today = Water balance yesterday + Rainfall −
>Evaporation
>> > #If Water balance today < 0 then Water balance today = 0
>> > #If Water balance today > 100 then Water balance today = 100
>> > wb=c()
>> > for (w in 1:length(Wb30$Water_Balance)){
>> >   if(w<0 & w>100){w<-0 & w<-100}
>>
>> The line above doesn't make sense.  It is impossible for w to be both
>> less than 0 and greater than 100, so the condition will never be
>true.
>> And if it is true, "w<-0 & w<-100" is not a sensible thing to do.
>>
>> >   #print (w);
>> >  for (i in 1:length(Wb30$Rainfall)){
>> >     for (j in 1:length(Wb30$Evaporation)){
>> >     }
>> >   }
>>
>> Those loops do nothing.
>>
>> >  wb<-Wb30$Water_Balance[w] +
>Wb30$Rainfall[i+1]-Wb30$Evaporation[j+1]
>>
>> Those should be using w-1 in place of w, and w in place of i+1 and
>j+1.
>>
>> Duncan Murdoch
>>
>> > }
>> > wb
>> >
>> > Any suggest of what I am missing for it to work correctly is
>welcome.
>> >
>> >
>> > Regards,
>> >
>> > Frederic Ntirenganya
>> > Maseno University,
>> > African Maths Initiative,
>> > Kenya.
>> > Mobile:(+254)718492836
>> > Email: fredo at aims.ac.za
>> > https://sites.google.com/a/aims.ac.za/fredo/
>> >
>> >       [[alternative HTML version deleted]]
>> >
>> > ______________________________________________
>> > R-help at 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.
>> >
>>
>>
>
>	[[alternative HTML version deleted]]
>
>______________________________________________
>R-help at 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.



More information about the R-help mailing list