Skip to content

Arrange data

4 messages · Md. Moyazzem Hossain, Jim Lemon, Rasmus Liland +1 more

#
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.

*Regards,*
*Md*
#
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
On Mon, Aug 3, 2020 at 8:52 PM Md. Moyazzem Hossain <hossainmm at juniv.edu> wrote:
#
On 2020-08-03 21:11 +1000, Jim Lemon wrote:
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
#
Hello,

And here is another way, with aggregate.

Make up test data.

set.seed(2020)
df1 <- expand.grid(Year = 2000:2018, Month = 1:12)
df1 <- df1[order(df1$Year),]
df1$Value <- sample(20:30, nrow(df1), TRUE)
head(df1)


#Use subset to keep only the relevant months
aggregate(Value ~ Year, data = subset(df1, Month <= 7), FUN = mean)


Hope this helps,

Rui Barradas

?s 12:33 de 03/08/2020, Rasmus Liland escreveu: