Hi Kwesi, I worked through your code below, and I think that when you have the two variables "mon.t1" and "seas.t1" you can select a "rolling quarter" like this:
# the file name in your example is different from the one you sent era<-read.table(file="SAfr_700hpa_7x5II.txt",header=FALSE,sep=" ", skip=1,dec = ".") era.nodes<-paste(era[,1],era[,2],sep=".") era.nodes<-as.numeric(era.nodes) era.nodes.days<-zooreg(era.nodes,start=as.Date("1980-01-01"), end=as.Date("2016-12-31")) era.nodes.days.t1<-window(era.nodes.days,start=as.Date("1980-01-01"), end=as.Date("2016-12-31")) mon.t1<-as.numeric(format(index(era.nodes.days.t1),"%m")) addyear<-0 # this loop transforms mon.t1 into an increasing sequence of months for(i in 2:length(mon.t1)) { if(seas.t1[i] > seas.t1[i-1]) addyear<-addyear+12 mon.t1[i]<-mon.t1[i] + addyear } for(i in 1:(max(mon.t1)-2)) { # this gives a logical index for the rolling quarter rq<-mon.t1 %in% i:(i+2) } Each successive "rq" produced by the last loop can be used to extract whatever values you want from "era" or "era.nodes". Jim On Tue, Jan 31, 2017 at 9:04 PM, Kwesi Quagraine <starskykw...@gmail.com> wrote: > Hello Jim, thanks for the code. But I come to you once again, I am not > looking to do a rolling mean, but to select JFM,FMA,MAM etc from the data > attached. Below is my sample code which actually selects these months. I > will rather be glad if I can have a function that does the selection for all > these 3 months selected for each year as shown in my last two lines of code; > Taking into accounts years with 29 days in February etc. > > rm(list = ls()) > library(zoo) > library(PCICt) > library(lattice) > library(RColorBrewer) > > setwd('/home/kwesi/Documents/700hpa/soms/') > # Reading the data > > era <- read.table(file="SAfr_700hpa_5x4II.txt",header = FALSE, sep = > "",skip=1,dec = ".") > era.nodes <- paste(era[,1],era[,2],sep=".") > > era.nodes <-as.numeric(era.nodes) > era.nodes.days<-zooreg(era.nodes,start=as.Date("1980-01-01"),end=as.Date("2016-12-31")) > > era.nodes.days.t1<-window(era.nodes.days,start=as.Date("1980-01-01"),end=as.Date("2016-12-31")) > > mon.t1<-as.numeric(format(index(era.nodes.days.t1),"%m")) > seas.t1 <-as.numeric(format(index(era.nodes.days.t1),"%Y")) > era.nodes.days.t1<-cbind(era.nodes.days.t1,mon.t1,seas.t1) > era.nodes.days.t1 > jfm80<-era.nodes.days.t1[1:91,1:3[era.nodes.days.t1[1:91,2]==1|era.nodes.days.t1[1:91,2]==2|era.nodes.days.t1[1:91,2]==3] > fma80<-era.nodes.days.t1[32:(91+30),1:3 > [era.nodes.days.t1[1:91,2]==2|era.nodes.days.t1[1:91,2]==3|era.nodes.days.t1[1:91,2]==4] > > On Tue, Jan 31, 2017 at 5:23 AM, Jim Lemon <drjimle...@gmail.com> wrote: >> >> Hi Kwesi, >> A mistake in the last email. Don't try to replace the column in >> era.sta as the result will be a different length. Try this: >> >> newera.sta2<-collapse.values(era.sta[,2],3) >> >> Jim >> >> On Tue, Jan 31, 2017 at 10:32 AM, Jim Lemon <drjimle...@gmail.com> wrote: >> > Hi Kwesi, >> > The function collapse_values will only work on a vector of numbers >> > with FUN="mean". era.sta looks like a data frame with at least two >> > elements. As the second of these elements seems to be numeric, perhaps >> > this will work: >> > >> > era.sta[,2]<-collapse.values(era.sta[,2],3) >> > >> > Don't try to apply the names to era.sta, that was just something to >> > make the example easier to understand. If you want to collapse more >> > than one column of era.sta do each one at a time and assign them to a >> > new data frame. In particular, if era[,1] is a vector of month names, >> > you will have to create a new vector of quarter (three month) names. >> > If there are very many of these, the collapse_values function can be >> > modified to do it automatically. >> > >> > Jim >> > >> > >> > >> > On Tue, Jan 31, 2017 at 9:50 AM, Kwesi Quagraine >> > <starskykw...@gmail.com> wrote: >> >> Hello Jim,this is my script now; I am having this error when I called >> >> the >> >> function;" In mean.default(list(era...1. = 1:444, Node_freq = >> >> c(-0.389855332400718, : argument is not numeric or logical: returning >> >> NA" >> >> Any help will be much appreciated. >> >> >> >> Kwesi >> >> >> >> rm(list = ls()) >> >> setwd('/home/kwesi/Documents/700hpa/soms/') >> >> # Reading the data >> >> >> >> era <- read.csv(file="som_freq.csv",header = TRUE, sep = ",",dec >> >> = >> >> ".") >> >> era.scaled <- scale(era[,2:3], center = TRUE, scale = TRUE) >> >> era.sta<-data.frame(era[,1],era.scaled) >> >> era.sta >> >> >> >> collapse_values<-function(x,span,FUN="mean",na.rm=FALSE) { >> >> jump<-span-1 >> >> newx<-rep(NA,length(x)-jump) >> >> for(i in 1:length(newx)) >> >> newx[i]<-do.call(FUN,list(x[i:(i+jump)],na.rm=na.rm)) >> >> return(newx) >> >> } >> >> >> >> #test<-1:12 >> >> names(era.sta)<-month.abb >> >> collapse_values(era.sta,3) >> >> era.sta >> >> >> >> >> >> On Mon, Jan 30, 2017 at 11:53 PM, Jim Lemon <drjimle...@gmail.com> >> >> wrote: >> >>> >> >>> Hi Kwesi, >> >>> Even without the data, it seems clear that you want something like a >> >>> rolling mean. Here is a simple function that will apply a function >> >>> like "mean" to successive bits of a vector of numbers: >> >>> >> >>> collapse_values<-function(x,span,FUN="mean",na.rm=FALSE) { >> >>> jump<-span-1 >> >>> newx<-rep(NA,length(x)-jump) >> >>> for(i in 1:length(newx)) >> >>> newx[i]<-do.call(FUN,list(x[i:(i+jump)],na.rm=na.rm)) >> >>> return(newx) >> >>> } >> >>> >> >>> test<-1:12 >> >>> names(test)<-month.abb >> >>> test >> >>> collapse_values(test,3) >> >>> [1] 2 3 4 5 6 7 8 9 10 11 >> >>> >> >>> Jim >> >>> >> >>> >> >>> >> >>> On Mon, Jan 30, 2017 at 11:53 PM, Kwesi Quagraine >> >>> <starskykw...@gmail.com> wrote: >> >>> > Hello, I have a data with two variables nodes and index, I want to >> >>> > extract >> >>> > 3 months seasons, with a shift of 1 month, that is, DJF, JFM, FMA >> >>> > etc to >> >>> > OND. Was wondering how to go about it. Kindly find attached the data >> >>> > as >> >>> > csv. >> >>> > Any help will be appreciated. >> >>> > >> >>> > Regards, >> >>> > Kwesi >> >>> > >> >>> > -- >> >>> > Try not to become a man of success but rather a man of value-Albert >> >>> > Einstein >> >>> > >> >>> > University of Cape Coast|College of Agriculture and Natural >> >>> > Sciences|Department >> >>> > of Physics| >> >>> > Team Leader|Recycle Up! Ghana|Technology Without Borders| >> >>> > Other emails: kwesi.quagra...@ucc.edu.gh|kwesi.quagra...@teog.de| >> >>> > Mobile: +233266173582 >> >>> > Skype: quagraine_cwasi >> >>> > Twitter: @Pkdilly >> >>> > ______________________________________________ >> >>> > 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. >> >> >> >> >> >> >> >> >> >> -- >> >> Try not to become a man of success but rather a man of value-Albert >> >> Einstein >> >> >> >> University of Cape Coast|College of Agriculture and Natural >> >> Sciences|Department of Physics| >> >> Team Leader|Recycle Up! Ghana|Technology Without Borders| >> >> Other emails: kwesi.quagra...@ucc.edu.gh|kwesi.quagra...@teog.de| >> >> Mobile: +233266173582 >> >> Skype: quagraine_cwasi >> >> Twitter: @Pkdilly >> >> > > > > > -- > Try not to become a man of success but rather a man of value-Albert Einstein > > University of Cape Coast|College of Agriculture and Natural > Sciences|Department of Physics| > Team Leader|Recycle Up! Ghana|Technology Without Borders| > Other emails: kwesi.quagra...@ucc.edu.gh|kwesi.quagra...@teog.de| > Mobile: +233266173582 > Skype: quagraine_cwasi > Twitter: @Pkdilly > ______________________________________________ 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.