[R] about adding a column for water year

lily li chocold12 at gmail.com
Tue Jul 4 21:40:05 CEST 2017


Thanks, it works. Yes, I got the same error message when tried my original
code and Rui's code:
 In if (DF$year == i & DF$month %in% 1:9) { ... :
  the condition has length > 1 and only the first element will be used

Also, I think I made a mistake, it should be i+1 rather than i-1.
Otherwise, it has no problem.

On Tue, Jul 4, 2017 at 1:20 PM, Bert Gunter <bgunter.4567 at gmail.com> wrote:

> Well, let's see:
>
> 1) You do not appear to understand basic flow control statements in R.
>
> Note that (from ?if):
>
> if(cond) expr
> if(cond) cons.expr  else  alt.expr
>
> where
> "cond   A length-one logical vector that is not NA."
>
> Your cond is a vector of length nrow(DF), so you don't want if, you
> want ifelse().
> Did you fail to show us your warning messages??
>
> 2. Revising your code and eliminating the extraneous brackets, one gets:
>
> for(i in 1972:1985){
>    ifelse(DF$year==i & DF$month %in% 1:9, DF$wyear <- i,
>    DF$wyear < i-1)
> }
>
> But that doesn't work either, giving only 1985. Why? -- because the
> assignment statement DF$wyear <- i  assigns the single value i to the
> whole column. So the whole column gets the last value of 1985, which
> is presumably what you saw but neglected to tell us.
>
> 3.  That can be fixed by ditching the loop and ising ifelse() properly:
>
> DF$wyear <-ifelse(DF$month %in% 1:9,DF$year ,DF$year-1)
>
> or even more succinctly, albeit with a trick (automatic coercion of
> logical to numeric)
>
>  DF$wyear <- DF$year - (DF$month %in% 10:12)
>
>
> This is an example of vectorization, a powerful feature of R that
> would be worthwhile for you to learn. Your initial use of a C like
> for() loop should be avoided when possible, as it could be here.
>
> If I have made an error in understanding what you are doing, please do
> let us all know. I get it wrong from time to time.
>
> Cheers,
> Bert
>
> Bert Gunter
>
> "The trouble with having an open mind is that people keep coming along
> and sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>
>
> On Tue, Jul 4, 2017 at 11:31 AM, lily li <chocold12 at gmail.com> wrote:
> > Hi R users,
> > I have a question about adding a column for water year. The dataframe has
> > the structure below. But the wyear column just shows one year. Could
> anyone
> > help me with this problem? Thanks.
> >
> > DF
> > year   month   day      time            flow
> > 1972      1         1    1972-01-01       5
> > 1972      1         2    1972-01-02       5.5
> > 1972      1         3    1972-01-03       6
> > ...
> > 1985     12       31   1985-12-31       6
> >
> >
> > for(i in 1972:1985){
> >     if(DF$year==i & DF$month %in% 1:9){
> >       DF$wyear <- i {
> >     }else{
> >       DF$wyear < i-1
> >     }
> >   }
> > }
> >
> >         [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > 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]]



More information about the R-help mailing list