Skip to content

Multiple plots and postscripts using split function

4 messages · PIKAL Petr, Florian Denzinger, Jim Lemon +1 more

#
Hi

Maybe others will disagree but I find for cycle for this type of task better than sapply.

for(i in 1:length(ind)) {

if (there are more than 3 date items*) {

postscript(ind[i])
do all plotting
dev.off()
}}

If you want to plot with gaps you need to add all relevant YEARs for x axis with missing value in y before plotting. Then R plots it automatically with gap.

x<-1:10
y<-rnorm(10)
y[5:6]<-NA
plot(x,y, type="b")

I would suggest to use merge for this task.

table(dat$ID)
gives you number of unique values for each ID and you can use it for discarding this ID from the list.

Regards
Petr
________________________________
Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a jsou ur?eny pouze jeho adres?t?m.
Jestli?e jste obdr?el(a) tento e-mail omylem, informujte laskav? neprodlen? jeho odes?latele. Obsah tohoto emailu i s p??lohami a jeho kopie vyma?te ze sv?ho syst?mu.
Nejste-li zam??len?m adres?tem tohoto emailu, nejste opr?vn?ni tento email jakkoliv u??vat, roz?i?ovat, kop?rovat ?i zve?ej?ovat.
Odes?latel e-mailu neodpov?d? za eventu?ln? ?kodu zp?sobenou modifikacemi ?i zpo?d?n?m p?enosu e-mailu.

V p??pad?, ?e je tento e-mail sou??st? obchodn?ho jedn?n?:
- vyhrazuje si odes?latel pr?vo ukon?it kdykoliv jedn?n? o uzav?en? smlouvy, a to z jak?hokoliv d?vodu i bez uveden? d?vodu.
- a obsahuje-li nab?dku, je adres?t opr?vn?n nab?dku bezodkladn? p?ijmout; Odes?latel tohoto e-mailu (nab?dky) vylu?uje p?ijet? nab?dky ze strany p??jemce s dodatkem ?i odchylkou.
- trv? odes?latel na tom, ?e p??slu?n? smlouva je uzav?ena teprve v?slovn?m dosa?en?m shody na v?ech jej?ch n?le?itostech.
- odes?latel tohoto emailu informuje, ?e nen? opr?vn?n uzav?rat za spole?nost ??dn? smlouvy s v?jimkou p??pad?, kdy k tomu byl p?semn? zmocn?n nebo p?semn? pov??en a takov? pov??en? nebo pln? moc byly adres?tovi tohoto emailu p??padn? osob?, kterou adres?t zastupuje, p?edlo?eny nebo jejich existence je adres?tovi ?i osob? j?m zastoupen? zn?m?.

This e-mail and any documents attached to it may be confidential and are intended only for its intended recipients.
If you received this e-mail by mistake, please immediately inform its sender. Delete the contents of this e-mail with all attachments and its copies from your system.
If you are not the intended recipient of this e-mail, you are not authorized to use, disseminate, copy or disclose this e-mail in any manner.
The sender of this e-mail shall not be liable for any possible damage caused by modifications of the e-mail or by delay with transfer of the email.

In case that this e-mail forms part of business dealings:
- the sender reserves the right to end negotiations about entering into a contract in any time, for any reason, and without stating any reasoning.
- if the e-mail contains an offer, the recipient is entitled to immediately accept such offer; The sender of this e-mail (offer) excludes any acceptance of the offer on the part of the recipient containing any amendment or variation.
- the sender insists on that the respective contract is concluded only upon an express mutual agreement on all its aspects.
- the sender of this e-mail informs that he/she is not authorized to enter into any contracts on behalf of the company except for cases in which he/she is expressly authorized to do so in writing, and such authorization or power of attorney is submitted to the recipient or the person represented by the recipient, or the existence of such authorization is known to the recipient of the person represented by the recipient.
#
Thank you everyone for your help so far. 

I am still working on the problem to get a merged new dataframe which fills in new rows with NA values for each year that is missing for plotting with gaps ( in the example the item BARTLEY: years 1984 to 1987 should be filled with a row containing NA values). Could someone maybe help me with this? Thank you. 


    NAME               			 ID      	YEAR	VALUE
    ADAMS				885		1988	      -2
    ADAMS				885		1989		0
    BAHIA DEL DIABLO	2665	1999		4
    BAHIA DEL DIABLO	2665	2000		8
    BAHIA DEL DIABLO	2665	2001	      19
    BAHIA DEL DIABLO	2665	2002	      13
    BAHIA DEL DIABLO	2665	2003	      13
    BARTLEY				893		1983		0
    BARTLEY				893		1988		2
    BARTLEY				893		1989	       -1
    CANADA				877		1972	       -1
    CLARK CPI			894		1973	       -3

Am 01.08.2014 um 11:27 schrieb PIKAL Petr <petr.pikal at precheza.cz>:
#
On Sat, 2 Aug 2014 05:22:26 AM Florian Denzinger wrote:
which fills
with
be filled
with this?

Hi Florian,
This is pretty messy, but it might do what you want:
fddf<-read.table(text="NAME,ID,YEAR,VALUE
ADAMS,885,1988,-2
ADAMS,885,1989,0
BAHIA DEL DIABLO,2665,1999,4
BAHIA DEL DIABLO,2665,2000,8
BAHIA DEL DIABLO,2665,2001,19
BAHIA DEL DIABLO,2665,2002,13
BAHIA DEL DIABLO,2665,2003,13
BARTLEY,893,1983,0
BARTLEY,893,1988,2
BARTLEY,893,1989,-1
CANADA,877,1972,-1
CLARK CPI,894,1973,-3",sep=",",header=TRUE)

fillgaps<-function(x,rangevar,fillvar,fillval=NA) {
 dimx<-dim(x)
 if(dimx[1] > 1) {
  newxrangevar<-min(x[[rangevar]]):max(x[[rangevar]])
  nrows<-length(newxrangevar)
  newx<-list()
  rangevarno<-which(names(x) %in% rangevar)
  fillvarno<-which(names(x) %in% fillvar)
  cat(rangevarno,fillvarno,"\n")
  for(xcol in 1:dimx[2]) {
   if(xcol == rangevarno) {
    newx[[xcol]]<-newxrangevar
   }
   else {
    if(xcol == fillvarno) {
     newx[[xcol]]<-rep(NA,nrows)
     newx[[xcol]][which(newxrangevar %in% x[[rangevar]])]<-x[[fillvar]]
    }
    else {
     if(is.numeric(x[1,xcol]))
      newx[[xcol]]<-rep(x[1,xcol],length.out=nrows)
     else
      newx[[xcol]]<-rep(as.character(x[1,xcol]),nrows)
    }
   }
  }
  newx<-as.data.frame(newx)
  names(newx)<-names(x)
 }
 else newx<-x
 return(newx)
}

fddfn<-levels(fddf$NAME)
for(fdvar in 1:length(fddfnames)) {
 if(fdvar == 1)
  newx<-fillgaps(fddf[fddf$NAME == fddfn[fdvar],],"YEAR","VALUE")
 else
  newx<-rbind(newx,fillgaps(fddf[fddf$NAME == 
fddfn[fdvar],],"YEAR","VALUE"))
}

Jim
#
Have you tried using the merge() function?  E.g.,

lapply(split(d, d$NAME), function(di)merge(all=TRUE, di,
data.frame(YEAR=seq(min(di$YEAR), max(di$YEAR), by=1))))
Bill Dunlap
TIBCO Software
wdunlap tibco.com


On Fri, Aug 1, 2014 at 8:22 PM, Florian Denzinger
<florian.denzinger at uzh.ch> wrote: