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 <starskykwesi at 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 <drjimlemon at 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 <drjimlemon at 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 >> > <starskykwesi at 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 <drjimlemon at 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 >> >>> <starskykwesi at 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.quagraine at ucc.edu.gh|kwesi.quagraine at teog.de| >> >>> > Mobile: +233266173582 >> >>> > Skype: quagraine_cwasi >> >>> > Twitter: @Pkdilly >> >>> > ______________________________________________ >> >>> > 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. >> >> >> >> >> >> >> >> >> >> -- >> >> 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.quagraine at ucc.edu.gh|kwesi.quagraine at 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.quagraine at ucc.edu.gh|kwesi.quagraine at teog.de| > Mobile: +233266173582 > Skype: quagraine_cwasi > Twitter: @Pkdilly >
Hello Jim, Hello everyone, does anyone know why this is happening? Any suggestions what might be causing it? I will be grateful for any help. Kwesi On Wed, Feb 1, 2017 at 1:12 AM, Jim Lemon <drjimlemon at gmail.com> wrote:> 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 <starskykwesi at 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 <drjimlemon at 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 <drjimlemon at 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 > >> > <starskykwesi at 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 <drjimlemon at 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 > >> >>> <starskykwesi at 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.quagraine at ucc.edu.gh|kwesi.quagraine at teog.de| > >> >>> > Mobile: +233266173582 > >> >>> > Skype: quagraine_cwasi > >> >>> > Twitter: @Pkdilly > >> >>> > ______________________________________________ > >> >>> > 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. > >> >> > >> >> > >> >> > >> >> > >> >> -- > >> >> 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.quagraine at ucc.edu.gh|kwesi.quagraine at 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.quagraine at ucc.edu.gh|kwesi.quagraine at 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.quagraine at ucc.edu.gh|kwesi.quagraine at teog.de| Mobile: +233266173582 Skype: quagraine_cwasi Twitter: @Pkdilly -------------- next part -------------- A non-text attachment was scrubbed... Name: freq_nodes_per_year.eps Type: application/postscript Size: 56641 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20170201/0fa290a8/attachment.eps>
Hi Kwesi, It looks to me as though you have plotted the output of your data. What you have used to plot it is a mystery. Maybe a stacked barplot with horizontal=TRUE? I don't suppose that the matrix of input values is available. Let's see, you have 20 rectangles in each bar and 36 bars. Suppose we have a matrix like this: kqmat<- matrix(sin(seq(pi/10,72*pi,pi/10))+rnorm(720,0,0.1), ncol=20,byrow=TRUE) library(plotrix) color2D.matplot(kqmat,axes=FALSE,xlab="Rolling quarter",ylab="Year", cellcolors=matrix(color.scale(kqmat,c(1,0,0),c(0,1,0),c(0,0,1)),nrow=20)) axis(2,at=1:36,labels=2015:1980,las=1) This is a "plot in the dark", but it may enlighten. Jim On Thu, Feb 2, 2017 at 5:26 AM, Kwesi Quagraine <starskykwesi at gmail.com> wrote:> Hello Jim, Hello everyone, does anyone know why this is happening? Any > suggestions what might be causing it? I will be grateful for any help. > > Kwesi > > On Wed, Feb 1, 2017 at 1:12 AM, Jim Lemon <drjimlemon at gmail.com> wrote: >> >> 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 <starskykwesi at 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 <drjimlemon at 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 <drjimlemon at 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 >> >> > <starskykwesi at 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 <drjimlemon at 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 >> >> >>> <starskykwesi at 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.quagraine at ucc.edu.gh|kwesi.quagraine at teog.de| >> >> >>> > Mobile: +233266173582 >> >> >>> > Skype: quagraine_cwasi >> >> >>> > Twitter: @Pkdilly >> >> >>> > ______________________________________________ >> >> >>> > 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. >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> -- >> >> >> 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.quagraine at ucc.edu.gh|kwesi.quagraine at 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.quagraine at ucc.edu.gh|kwesi.quagraine at 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.quagraine at ucc.edu.gh|kwesi.quagraine at teog.de| > Mobile: +233266173582 > Skype: quagraine_cwasi > Twitter: @Pkdilly >
Hi Kwesi, I can get a plot out of your code without the colors (I don't have RColorBrewer installed), but it doesn't look like the one you attached. It is displaying: prop.table(freqyears,margin=2)*100/365 which contains 20 rows and 37 columns. There are a lot of commands in the file that don't seem to do anything or even throw errors. I'm afraid that I can't debug the code you sent, partly because I don't really know what you are attempting to display. Jim On Thu, Feb 2, 2017 at 10:35 AM, Kwesi Quagraine <starskykwesi at gmail.com> wrote:> Hello Jim, Yes the idea is brilliant. I have been able to manipulate the > barplot with "margin" to get the plot in a better shape but now the y-axis > is out of the plot zone. I have attached my script. Kindly have a look. Its > with the data I earlier sent. > > > > On Thu, Feb 2, 2017 at 1:08 AM, Jim Lemon <drjimlemon at gmail.com> wrote: >> >> Hi Kwesi, >> It looks to me as though you have plotted the output of your data. >> What you have used to plot it is a mystery. Maybe a stacked barplot >> with horizontal=TRUE? I don't suppose that the matrix of input values >> is available. Let's see, you have 20 rectangles in each bar and 36 >> bars. Suppose we have a matrix like this: >> >> kqmat<- >> matrix(sin(seq(pi/10,72*pi,pi/10))+rnorm(720,0,0.1), >> ncol=20,byrow=TRUE) >> library(plotrix) >> color2D.matplot(kqmat,axes=FALSE,xlab="Rolling quarter",ylab="Year", >> cellcolors=matrix(color.scale(kqmat,c(1,0,0),c(0,1,0),c(0,0,1)),nrow=20)) >> axis(2,at=1:36,labels=2015:1980,las=1) >> >> This is a "plot in the dark", but it may enlighten. >> >> Jim >> >> >> On Thu, Feb 2, 2017 at 5:26 AM, Kwesi Quagraine <starskykwesi at gmail.com> >> wrote: >> > Hello Jim, Hello everyone, does anyone know why this is happening? Any >> > suggestions what might be causing it? I will be grateful for any help. >> > >> > Kwesi >> > >> > On Wed, Feb 1, 2017 at 1:12 AM, Jim Lemon <drjimlemon at gmail.com> wrote: >> >> >> >> 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 >> >> <starskykwesi at 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 <drjimlemon at 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 <drjimlemon at 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 >> >> >> > <starskykwesi at 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 >> >> >> >> <drjimlemon at 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 >> >> >> >>> <starskykwesi at 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.quagraine at ucc.edu.gh|kwesi.quagraine at teog.de| >> >> >> >>> > Mobile: +233266173582 >> >> >> >>> > Skype: quagraine_cwasi >> >> >> >>> > Twitter: @Pkdilly >> >> >> >>> > ______________________________________________ >> >> >> >>> > 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. >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> -- >> >> >> >> 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.quagraine at ucc.edu.gh|kwesi.quagraine at 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.quagraine at ucc.edu.gh|kwesi.quagraine at 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.quagraine at ucc.edu.gh|kwesi.quagraine at 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.quagraine at ucc.edu.gh|kwesi.quagraine at teog.de| > Mobile: +233266173582 > Skype: quagraine_cwasi > Twitter: @Pkdilly >-------------- next part -------------- A non-text attachment was scrubbed... Name: kq.png Type: image/png Size: 4191 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20170202/126711dd/attachment.png>