Re: [R] about adding a column for water year

2017-07-04 Thread Jim Lemon
Hi lily,
It might be easier doing it like this:

DF<-data.frame(year=rep(1972:1985,each=12),
 month=rep(1:12,14),day=rep(1,168))
DF$time<-paste(DF$year,DF$month,DF$day,sep="-")
DF$flow<-runif(168,4,7)
DF$wyear<-DF$year + (DF$month > 9)

Jim

On Wed, Jul 5, 2017 at 4:31 AM, lily li  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  timeflow
> 1972  1 11972-01-01   5
> 1972  1 21972-01-02   5.5
> 1972  1 31972-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@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.

__
R-help@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.


Re: [R] about adding a column for water year

2017-07-04 Thread Jeff Newmiller
Hardly. DF$wyear is a vector, but it is being treated as though it is a scalar. 
Read Bert's response. 
-- 
Sent from my phone. Please excuse my brevity.

On July 4, 2017 11:17:24 AM PDT, Rui Barradas  wrote:
>Hello,
>
>You have a '{' too many.
>
>for(i in 1972:1985){
>   if(DF$year==i & DF$month %in% 1:9){
> DF$wyear <- i
>   }else{
> DF$wyear < i-1
>   }
> }
>  }
>
>I believe this is it.
>
>Hope this helps,
>
>Rui Barradas
>
>Em 04-07-2017 19:31, lily li escreveu:
>> 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  timeflow
>> 1972  1 11972-01-01   5
>> 1972  1 21972-01-02   5.5
>> 1972  1 31972-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@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.
>>
>
>__
>R-help@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.

__
R-help@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.


Re: [R] about adding a column for water year

2017-07-04 Thread Rui Barradas

Hello,

You have a '{' too many.

for(i in 1972:1985){
  if(DF$year==i & DF$month %in% 1:9){
DF$wyear <- i
  }else{
DF$wyear < i-1
  }
}
 }

I believe this is it.

Hope this helps,

Rui Barradas

Em 04-07-2017 19:31, lily li escreveu:

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  timeflow
1972  1 11972-01-01   5
1972  1 21972-01-02   5.5
1972  1 31972-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@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.



__
R-help@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.


Re: [R] about adding a column for water year

2017-07-04 Thread lily li
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  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  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  timeflow
> > 1972  1 11972-01-01   5
> > 1972  1 21972-01-02   5.5
> > 1972  1 31972-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@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]]

__
R-help@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.


Re: [R] about adding a column for water year

2017-07-04 Thread Bert Gunter
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  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  timeflow
> 1972  1 11972-01-01   5
> 1972  1 21972-01-02   5.5
> 1972  1 31972-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@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.

__
R-help@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.


[R] about adding a column for water year

2017-07-04 Thread lily li
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  timeflow
1972  1 11972-01-01   5
1972  1 21972-01-02   5.5
1972  1 31972-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@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.