[R] Arrange data

Md. Moyazzem Hossain ho@@@|nmm @end|ng |rom jun|v@edu
Sun Aug 9 21:59:50 CEST 2020


Dear Jim,

Thanks a lot for your support.

Take care.

Md

On Wed, Aug 5, 2020 at 1:06 PM Jim Lemon <drjimlemon using gmail.com> wrote:

> Hi Md,
> I think the errors are that you forgot to initialize "m", calculated
> the mean outside the loops and forgot the final brace:
>
> m<-rep(0,44)
> for(i in 1975:2017) {
>   for(j in 1:44) {
>    mddat2[j]<-mddat[mddat$Year == i & mddat$Month >= 7 |
>       mddat$Year == (i+1) & mddat$Month <= 6,]
>    m[j]=mean(mddat2$Value)
>  }
> }
>
> Jim
>
> On Wed, Aug 5, 2020 at 6:04 AM Md. Moyazzem Hossain <hossainmm using juniv.edu>
> wrote:
> >
> > Dear Jim,
> >
> > Thank you very much. You are right. It is good now. However, I want to
> continue it up to the year 2017.
> >
> > I use the following code but got the error
> >
> > for(i in 1975:2017){
> >   for(j in 1:44){
> > mddat2[j]<-mddat[mddat$Year == i & mddat$Month >= 7 |
> >                 mddat$Year == (i+1) & mddat$Month <= 6,]
> > }
> > m[j]=mean(mddat2$Value)
> >
> > }
> > m
> >
> > Please help me in this regard. Many thanks in advance.
> >
> > Regards,
> > Md
> >
> > On Tue, Aug 4, 2020 at 8:41 AM Jim Lemon <drjimlemon using gmail.com> wrote:
> >>
> >> Your problem is in the subset operation. You have asked for a value of
> >> month greater or equal to 7 and less than or equal to 6. You probably
> >> got an error message that told you that the data were of length zero
> >> or something similar. If you check the result of that statement:
> >>
> >> > mddat$month >= 7 & mddat$month <= 6
> >> logical(0)
> >>
> >> In other words, the two logical statements when ANDed cannot produce a
> >> result. A number cannot be greater than or equal to 7 AND less than or
> >> equal to 6. What you want is:
> >>
> >> mddat2<-mddat[mddat$Year == 1975 & mddat$Month >= 7 |
> >>  mddat$Year == 1976 & mddat$Month <= 6,]
> >> mean(mddat2$Value)
> >> [1] 88.91667
> >>
> >> Apart from that, your email client is inserting EOL characters that
> >> cause an error when pasted into R.
> >>
> >> Error: unexpected input in "�"
> >>
> >> Probably due to MS Outlook, this has been happening quite a bit lately.
> >>
> >> Jim
> >>
> >> On Mon, Aug 3, 2020 at 11:30 PM Md. Moyazzem Hossain
> >> <hossainmm using juniv.edu> wrote:
> >> >
> >> > Dear Jim,
> >> >
> >> > Thank you very much. It is working now.
> >> >
> >> > However, I am also trying to find the average of the value from July
> 1975 to June 1976 and recorded as the value for the year 1975 but got an
> error message. I am attaching the data file here. Please check the
> attachment.
> >> >
> >> > mddat=read.csv("F:/mddat.csv", header=TRUE)
> >> > mddat2<-mddat[mddat$Month >=7 & mddat$Month <= 6,]
> >> > jan2jun<-by(mddat2$Value,mddat2$Year,mean)
> >> > jan2jun
> >> >
> >> > Please help me again and many thanks in advance.
> >> >
> >> > Md
> >> >
> >> >
> >> > On Mon, Aug 3, 2020 at 12:33 PM Rasmus Liland <jral using posteo.no> wrote:
> >> >>
> >> >> On 2020-08-03 21:11 +1000, Jim Lemon wrote:
> >> >> > On Mon, Aug 3, 2020 at 8:52 PM Md. Moyazzem Hossain <
> hossainmm using juniv.edu> wrote:
> >> >> > >
> >> >> > > Hi,
> >> >> > >
> >> >> > > I have a dataset having monthly
> >> >> > > observations (from January to
> >> >> > > December) over a period of time like
> >> >> > > (2000 to 2018). Now, I am trying to
> >> >> > > take an average the value from
> >> >> > > January to July of each year.
> >> >> > >
> >> >> > > The data looks like
> >> >> > > Year    Month  Value
> >> >> > > 2000    1         25
> >> >> > > 2000    2         28
> >> >> > > 2000    3         22
> >> >> > > ....    ......      .....
> >> >> > > 2000    12       26
> >> >> > > 2001     1       27
> >> >> > > .......         ........
> >> >> > > 2018    11       30
> >> >> > > 20118   12      29
> >> >> > >
> >> >> > > Can someone help me in this regard?
> >> >> > >
> >> >> > > Many thanks in advance.
> >> >> >
> >> >> > Hi Md,
> >> >> > One way is to form a subset of your
> >> >> > data, then calculate the means by
> >> >> > year:
> >> >> >
> >> >> > # assume your data is named mddat
> >> >> > mddat2<-mddat[mddat$month < 7,]
> >> >> > jan2jun<-by(mddat2$value,mddat2$year,mean)
> >> >> >
> >> >> > Jim
> >> >>
> >> >> Hi Md,
> >> >>
> >> >> you can also define the period in a new
> >> >> column, and use aggregate like this:
> >> >>
> >> >>         Md <- structure(list(
> >> >>         Year = c(2000L, 2000L, 2000L,
> >> >>         2000L, 2001L, 2018L, 2018L),
> >> >>         Month = c(1L, 2L, 3L, 12L, 1L,
> >> >>         11L, 12L),
> >> >>         Value = c(25L, 28L, 22L, 26L,
> >> >>         27L, 30L, 29L)),
> >> >>         class = "data.frame",
> >> >>         row.names = c(NA, -7L))
> >> >>
> >> >>         Md[Md$Month %in%
> >> >>                 1:6,"Period"] <- "first six months of the year"
> >> >>         Md[Md$Month %in% 7:12,"Period"] <- "last six months of the
> year"
> >> >>
> >> >>         aggregate(
> >> >>           formula=Value~Year+Period,
> >> >>           data=Md,
> >> >>           FUN=mean)
> >> >>
> >> >> Rasmus
> >> >
> >> >
> >> >
> >
> >
> >
>


-- 
Best Regards,
Md. Moyazzem Hossain
Associate Professor
Department of Statistics
Jahangirnagar University
Savar, Dhaka-1342
Bangladesh
Website: http://www.juniv.edu/teachers/hossainmm
Research: *Google Scholar
<https://scholar.google.com/citations?user=-U03XCgAAAAJ&hl=en&oi=ao>*;
*ResearchGate
<https://www.researchgate.net/profile/Md_Hossain107>*; *ORCID iD
<https://orcid.org/0000-0003-3593-6936>*

	[[alternative HTML version deleted]]



More information about the R-help mailing list